大佬们,这道题可以用差分来写吗

P1914 小书童——凯撒密码

YYAN_ZU @ 2024-05-25 22:58:41

#include<iostream>
#include<cstring>
using namespace std;
int b[100];
int main()
{
    int n;
    cin>>n;
    string a;
    cin>>a;
    int x=a.size();
    for(int i=0;i<x;i++){
        b[i]=a[i]-a[i-1];
        b[i]+=n;
    }
    for(int i=0;i<x;i++){
        b[i]+=b[i-1];
        printf("%c",b[i]);
    }
    return 0;
} 

by zhang8031 @ 2024-05-25 23:04:49


by zhang8031 @ 2024-05-25 23:14:35

第一:你的代码 当z的时候,应该是n+=97(ASCII码)你是{123(ASCII码)

你应该加个判断

if(a[i]=='z'){
    b[i]='a'+n;
}

最后转换一下;

第二:你应该和97(a(ASCII))比;


by zhang8031 @ 2024-05-25 23:15:49

我自己写的是

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    int n;
    cin >> n;
    cin >> s;
    for(int i=0;i<s.size();i++){
        for(int j=1;j<=n;j++){
            ++s[i];
            if(s[i]>'z'){
                s[i]='a';
            }
        }
    }
    cout << s;
    return 0;
}

by YYAN_ZU @ 2024-05-25 23:30:55

@zhang8031 大佬我刚才优化了一下,感觉可以跑了,但还是和差分的模板不太一样,这是为啥啊

#include<iostream>
#include<cstring>
using namespace std;
int b[100];
int main()
{
    int n;
    cin>>n;
    string a;
    cin>>a;
    int x=a.size();
    for(int i=0;i<x;i++){
        b[i]=a[i]-a[i-1];
        if(i==0){
          b[0]+=n;  
        }
    }
    for(int i=0;i<x;i++){
        b[i]+=b[i-1];
        printf("%c",b[i]);
    }
    return 0;
} #include<iostream>
#include<cstring>
using namespace std;
int b[100];
int main()
{
    int n;
    cin>>n;
    string a;
    cin>>a;
    int x=a.size();
    for(int i=0;i<x;i++){
        b[i]=a[i]-a[i-1];
        if(i==0){
          b[0]+=n;  
        }
    }
    for(int i=0;i<x;i++){
        b[i]+=b[i-1];
        printf("%c",b[i]);
    }
    return 0;
} 

by zhang8031 @ 2024-05-25 23:49:08

@YYAN_ZU

因为差分对于这道题不太适合

你要练差分的去P1083,P1438,P1438这一些时候差分


by Fractured_Angel @ 2024-05-26 06:10:14

没必要,太水了


by YYAN_ZU @ 2024-05-26 10:26:56

@zhang8031 好的,感谢大佬!!!


|