POJ2159 ancient cipher - 思维题

2017-08-31 20:11:39

writer:pprp

一开始说好这个是个水题,就按照水题的想法来看,唉~

最后还是懵逼了,感觉太复杂了,一开始想要排序两串字符,然后移动之类的,但是看了看

好像没有什么规律...

然后就去膜大神code了

其实转换了一个思路,对两个字符串分别统计每个的个数,

然后分别排序,如果每个个数都可以对的上就说明可以通过两个操作得到

代码如下:

/*
@theme:poj 2159 ancient cipher
@writer:pprp
@declare:
@begin:19:20
@end:20:07
@date:2017/8/31
*/ #include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; int main()
{
//freopen("in.txt","r",stdin);
ios::sync_with_stdio(false); int a[] = {};
int b[] = {}; string str1, str2; cin >> str1 >> str2; for(int i = ; i < str1.length() ; i++)
a[str1[i] - 'A']++;
for(int i = ;i < str2.length() ; i++)
b[str2[i] - 'A']++; sort(a,a+);
sort(b,b+); int i;
for(i = ; i < ; i++)
if(a[i] != b[i])
break; if(i != )
cout << "NO" << endl;
else
cout << "YES" << endl; return ;
}

英语:

encrypted 加密
eavesdrop 偷听
cipher 密码
substitute 代替
permutation 变换组合

上一篇:[算法竞赛入门经典]Ancient Cipher, NEERC 2004,UVa1339


下一篇:洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)