uva_1339_Ancient Cipher

解题过程:刚开始读了一遍英文的题目,没大怎么看明白,算input怎么也解不出来output,以为是不同字母和对应的映射字母之间的差值必须为固定的(没翻译出来原题中“Substitution cipher changes all occurrences of each letter to some other letter. Substitutes for all letters must be different. For some letters substitute letter may coincide with the original letter.”这句– ),最后才知道不固定,然后才做出来了。统计每个字幕出现的次数,然后排序,看是否能一一对应即可。
代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void PX(int a[26])
{
    int i,j,t,flag;
    for(i=1;i<=25;i++)
    {
        flag=0;
        for(j=0;j<25;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
                flag=1;
            }
        }
        if(flag==0) break;
    }
}

int main()
{
    char a[105],b[105];
    int a1[26],a2[26],i,flag=0;
    while(~scanf("%s%s",a,b))
    {
        flag=1;
        memset(a1,0,sizeof(a1));
        memset(a2,0,sizeof(a2));
        for(i=0;i<strlen(a);i++)
        {
            a1[a[i]-'A']++;
            a2[b[i]-'A']++;
        }
        PX(a1);
        PX(a2);
        for(i=0;i<26;i++)
        {
            if(a1[i]!=a2[i])
            {
                flag=0;
                break;
            }
        }
        if(flag==0) printf("NO\n");
        else printf("YES\n");

    }
    return 0;
}

你可能感兴趣的:(c,uva)