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秒
 ************************************************************************/

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<stack>
#include<cctype>
#define y1 hust111qqz
#define yn hez111qqz
#define j1 cute111qqz
#define ms(a,x) memset(a,x,sizeof(a))
#define lr dying111qqz
using namespace std;
#define For(i, n) for (int i=0;i<int(n);++i)  
typedef long long LL;
typedef double DB;
const int inf = 0x3f3f3f3f;
const int N=30;
string st1,st2;
int len;
int a[N],b[N];


bool cmp( int a,int b)
{
    if (a>b) return true;
    return false;
}
int main()
{
  #ifndef  ONLINE_JUDGE 
   freopen("in.txt","r",stdin);
  #endif
   ms(a,0);
   ms(b,0);
   cin>>st1>>st2;
   len = st1.length();
  // cout<<st1<<endl<<st2<<endl;
   for ( int i = 0 ; i < len ; i ++)
    {
	int tmp = st1[i]-'A';
	a[tmp]++;
	tmp = st2[i]-'A';
	b[tmp]++;
    }
   
   sort(a,a+26,cmp);
   sort(b,b+26,cmp);
  //  for ( int i = 0 ; i < 26 ; i++) cout<<"a[i]:"<<a[i]<<" b[i]"<<b[i]<<endl;

   bool flag = true;
   for ( int i = 0 ; i < 26 ; i++)
    {
	if (a[i]!=b[i])
	{
	    flag = false;
	    break;
	}
    }
   if (flag)
    {
	puts("YES");
    }
   else
    {
	puts("NO");
    }
    
   
 #ifndef ONLINE_JUDGE  
  fclose(stdin);
  #endif
	return 0;
}