1 条题解

  • 0
    @ 2025-4-12 21:36:08

    C :

    #include<stdio.h>
    #include<string.h>
    int main(void)
    {
        int k1,k2,k3;
        while(scanf("%d%d%d",&k1,&k2,&k3)!=EOF)
        {
            int i,j,i1=0,i2=0,i3=0,i11=0,i22=0,i33=0,p[100005];
            char s[100005],s1[100005],s2[100005],s3[100005],s11[100005],s22[100005],s33[100005];
            scanf("%s",s);
            for(i=0;i<strlen(s);i++)
                if(s[i]>='a'&&s[i]<='i')
                {
                    s1[i1++]=s[i];
                    p[i]=1;
                }
                else if(s[i]>='j'&&s[i]<='r')
                {
                    s2[i2++]=s[i];
                    p[i]=2;
                }
                else if((s[i]>='s'&&s[i]<='z')||s[i]=='_')
                {
                    s3[i3++]=s[i];
                    p[i]=3;
                }
                if(i1!=0)
                k1=k1%i1;
                if(i2!=0)
                k2=k2%i2;
                if(i3!=0)
                k3=k3%i3;
                for(i=0;i<i1;i++)
                    s11[i]=s1[(i-k1+i1)%i1];
                for(i=0;i<i2;i++)
                    s22[i]=s2[(i-k2+i2)%i2];
                for(i=0;i<i3;i++)
                    s33[i]=s3[(i-k3+i3)%i3];
                for(i=0;i<strlen(s);i++)
                    if(p[i]==1) s[i]=s11[i11++];
                else if(p[i]==2) s[i]=s22[i22++];
                else if(p[i]==3) s[i]=s33[i33++];
    
    
                printf("%s\n",s);
        }
        return 0;
    }
    
    

    C++ :

    //364K	32MS
    #include<stdio.h>
    #include<string.h>
    #define M 107
    char ans[3][M],ss[3][M],s[M];//ans存的是加密字符串,ss存的是加密后
    int p[3];
    void change(char s1[M],int l,int k,char s2[M])//转换后的位置
    {
        for(int i=0;i<l;i++)
            s2[(i+k)%l]=s1[i];
    }
    int main()
    {
        int k1,k2,k3;
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(scanf("%d%d%d",&k1,&k2,&k3)!=EOF)
        {
            scanf("%s",s);
            int len=strlen(s),l1=0,l2=0,l3=0;
            for(int i=0;i<len;i++)
            {
                if(s[i]>='a'&&s[i]<='i'){p[i]=1;ans[1][l1++]=s[i];}
                else if(s[i]>='j'&&s[i]<='r'){p[i]=2;ans[2][l2++]=s[i];}
                else{p[i]=3;ans[3][l3++]=s[i];}
            }
            if(l1)k1%=l1;
            if(l2)k2%=l2;
            if(l3)k3%=l3;
            change(ans[1],l1,k1,ss[1]);
            change(ans[2],l2,k2,ss[2]);
            change(ans[3],l3,k3,ss[3]);
            l1=l2=l3=0;
            for(int i=0;i<len;i++)
                if(p[i]==1){printf("%c",ss[1][l1++]);}
                else if(p[i]==2){printf("%c",ss[2][l2++]);}
                else if(p[i]==3){printf("%c",ss[3][l3++]);}
            printf("\n");
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    993
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者