题目链接:http://poj.org/problem?id=2159
Ancient Cipher
解题思路:题目很坑,我开始就以为是每个字母都是加上或减去同一个数,然后经过某种变换得出的。然后这个变换,我想了好久,最后还是经队友的提醒才知道,无论字母变成什么,它的频数是不会变得,最后根据它的频数求解即可!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int a[60];
int b[60];
int main()
{
string s1,s2,s3;
while(cin>>s1>>s2)
{
int i=0,l=s1.size(),flag=1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<l;i++)
{
a[s1[i]-'A']++;
b[s2[i]-'A']++;
}
sort(a,a+60);
sort(b,b+60);
for(i=0;i<60;i++)
{
if(a[i]!=b[i])
{
flag=0;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}