Ancient Cipher

UVa1339


这道题注意并不是固定变换,所以只要判断字符个数是否一样。

#include <stdio.h>
#include <algorithm>
#include <string.h>
#define clr( a ) memset ( a, 0, sizeof ( a ) )
const int maxn = 105, N = 26;
int cnt1[N], cnt2[N];
char str[maxn], ch[maxn];
int main ( )
{
    int flag;
    //重排和映射并不是固定,是自己定的
    while ( ~ scanf ( "%s%s", str, ch ) )
    {
        flag = 1;
        clr ( cnt1 );
        clr ( cnt2 );
        for ( int i = 0; str[i]; i ++ )
            cnt1[ str[i]-'A' ] ++;
        for ( int i = 0; ch[i]; i ++ )
            cnt2[ ch[i]-'A' ] ++;
        std :: sort ( cnt1, cnt1+N );
        std :: sort ( cnt2, cnt2+N );
        //所以只需要判断每个字符出现的次数是否一样
        for ( int i = 0; i < N; i ++ )
            if ( cnt1[i] != cnt2[i] )
                flag = 0;
        printf ( flag ? "YES\n" : "NO\n" );
    }
    return 0;
}


你可能感兴趣的:(Ancient Cipher)