poj 2159 Ancient Cipher(水)

由于顺序是可以改变的. 所以考虑是否可以映射.只要存在字母对应出现的次数都相同.那么就可以通过映射得到. 具体是开一个数组记录每个字母出现的次数... 然后sort

/*************************************************************************
	> File Name: code/poj/2159.cpp
	> Author: 111qqz
	> Email: rkz2013@126.com 
	> Created Time: 2015年09月23日 星期三 19时04分34秒
 ************************************************************************/
 1#include<iostream>
 2#include<iomanip>
 3#include<cstdio>
 4#include<algorithm>
 5#include<cmath>
 6#include<cstring>
 7#include<string>
 8#include<map>
 9#include<set>
10#include<queue>
11#include<vector>
12#include<stack>
13#include<cctype>
14#define y1 hust111qqz
15#define yn hez111qqz
16#define j1 cute111qqz
17#define ms(a,x) memset(a,x,sizeof(a))
18#define lr dying111qqz
19using namespace std;
20#define For(i, n) for (int i=0;i<int(n);++i)  
21typedef long long LL;
22typedef double DB;
23const int inf = 0x3f3f3f3f;
24const int N=30;
25string st1,st2;
26int len;
27int a[N],b[N];
 1bool cmp( int a,int b)
 2{
 3    if (a>b) return true;
 4    return false;
 5}
 6int main()
 7{
 8  #ifndef  ONLINE_JUDGE 
 9   freopen("in.txt","r",stdin);
10  #endif
11   ms(a,0);
12   ms(b,0);
13   cin>>st1>>st2;
14   len = st1.length();
15  // cout<<st1<<endl<<st2<<endl;
16   for ( int i = 0 ; i < len ; i ++)
17    {
18	int tmp = st1[i]-'A';
19	a[tmp]++;
20	tmp = st2[i]-'A';
21	b[tmp]++;
22    }
1   sort(a,a+26,cmp);
2   sort(b,b+26,cmp);
3  //  for ( int i = 0 ; i < 26 ; i++) cout<<"a[i]:"<<a[i]<<" b[i]"<<b[i]<<endl;
 1   bool flag = true;
 2   for ( int i = 0 ; i < 26 ; i++)
 3    {
 4	if (a[i]!=b[i])
 5	{
 6	    flag = false;
 7	    break;
 8	}
 9    }
10   if (flag)
11    {
12	puts("YES");
13    }
14   else
15    {
16	puts("NO");
17    }
1 #ifndef ONLINE_JUDGE  
2  fclose(stdin);
3  #endif
4	return 0;
5}