不得不说,这个题目不算很水,题目也看了很长时间,就读懂了是hash,还是看了discuss才懂了,安装频度比较。
想一想,这个题目说可以安装任意的方式进行swap,可以+ - 任意大小进行转化,so 抓住频度这个特征。

/*MDK 2159 Accepted 720K 79MS G++ 2493B 2011-11-03 21:23:24*/
map<char,int> mp,mpt;
map<char,int>::iterator p;
VI vecs,vect;
int main ()
{
char ss[MAXN],st[MAXN];
while(~SCFS(ss)) {
SCFS(st);
bool flag = 0;
mp.clear();mpt.clear();
vecs.clear();vect.clear();
int len2 = strlen(st);
int len1 = strlen(ss);
if(len2 != len1) {
puts("NO");
continue;
}
F(i,len1) {
mp[ss[i]]++;
}
F(i,len2) {
mpt[st[i]]++;
}
for(p = mp.begin();p!=mp.end();p++) {
vecs.push_back(p->second);
}
for(p = mpt.begin();p!=mpt.end();p++) {
vect.push_back(p->second);
}
sort(vecs.begin(),vecs.end());
sort(vect.begin(),vect.end());
if(vect.size() != vecs.size()) {
puts("NO");
continue;
}
F(i,vect.size()) {
if(vecs[i] != vect[i]) {
flag = 1;
break;
}
}
if(flag == 0) {
puts("YES");
} else {
puts("NO");
}
}
}