Gym - 101673C DRM Messages

    科技2022-07-17  134

    题目

    传送门

    Sample Input 1 EWPGAJRB Sample Output 1 ABCD Sample Input 2 UEQBJPJCBUDGBNKCAHXCVERXUCVK Sample Output 2 ACMECNACONTEST

    题意:给出一个字符串执行以下三步操作 1:把字符串分为前后相等的两部分 2:把前一半的价值相加,每一个字符都加上这个价值得到另一个字符.后一半进行同样操作 3 把前一半的每个字符分别加上后一半的对应字符的价值得到新的串

    AC code

    #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<sstream> #include<queue> #include<stack> using namespace std; int main() { ios::sync_with_stdio(0); char a[20000],b[30]; for(int i='A';i<='Z';i++) b[i-'A']=i; cin>>a; int k=strlen(a),sum=0,sum1=0,kk=k/2; for(int i=0;i<kk;i++) { sum+=a[i]-'A'; } for(int i=0;i<kk;i++) { int o=(a[i]-'A'+sum)%26; a[i]=b[o]; } //前一半 for(int i=kk;i<k;i++) { sum1+=a[i]-'A'; } for(int i=kk;i<k;i++) { int o=(a[i]-'A'+sum1)%26; a[i]=b[o]; } //后一半 for(int i=0;i<kk;i++) { int o=(a[i]-'A'+a[i+kk]-'A')%26; a[i]=b[o]; } for(int i=0;i<kk;i++) printf("%c",a[i]); printf("\n"); }/
    Processed: 0.009, SQL: 8