http://codeforces.com/problemset/problem/559/B
题意,给出两个字符串,确定,是否相等,定义字符串是否相等为,如果为奇数串,只能比较是否每个字符相同,如果为偶数串,第一个串分成两个相等长度的串为a1 b1,第二个串也分成a2 b2,a1== a2 && b1 == b2 || a1 == b2 && a2 == b2.
思路:
直接把字符串内部排序。因为,偶数个字符串的,前部分与后部分,是哪个顺序,并不影响这个字符串的大小,所以我们要使一个字符串只有一种表达方法,也就是如果是偶串,则要求,前面的串比后半部分的串要小,这样就可以唯一化了,比第一种方法要快很多倍了。只是在处理字符串上花费时间,复杂度是线性的。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <queue>;
using namespace std;
string minstring(string ss)
{
string s3,s4;
if(ss.size()%2==1) return ss;
s3=minstring(ss.substr(0,ss.size()/2));
s4=minstring(ss.substr(ss.size()/2,ss.size()/2));
if(s3<s4) return s3+s4;
else return s4+s3;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
if(minstring(s1)==minstring(s2)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}