codeforces 560 D. Equivalent Strings(分治)

问两个长度相同的字符串是否等价.

相等的条件是,两个字符串相等,或者两个偶数长度(因为要分成长度相同的两段,所以一定是偶数长度才可分)字符串平均分成两部分,每部分对应相等(不考虑顺序)

一开始有一点没想清楚.

如果字符串a分成相等长度的两部分a1,a2,字符串b分成相等的两部分b1,b2

我错误得以为,如果a1和a2等价&&b1;和b2等价,那么a 和 b 就相等了(a和b一定等价,但不一定相等),于是只判断了 equal(a1,b2)&&equal;(a2,b1)

wa了一次.

<

/*************************************************************************
	> File Name: code/cf/#313/D.cpp
	> Author: 111qqz
	> Email: rkz2013@126.com 
	> Created Time: 2015年08月17日 星期一 08时42分25秒
 ************************************************************************/
 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#define y0 abc111qqz
14#define y1 hust111qqz
15#define yn hez111qqz
16#define j1 cute111qqz
17#define tm crazy111qqz
18#define lr dying111qqz
19using namespace std;
20#define REP(i, n) for (int i=0;i<int(n);++i)  
21typedef long long LL;
22typedef unsigned long long ULL;
23const int inf = 0x7fffffff;
24const int N=2E5+7;
25string a,b;
26int len;
 1bool equal( string x,string y,int len)
 2{
 3  //  cout<<"x:"<<x<<" y:"<<y<<" len:"<<len<<endl;
 4    if (x==y) return true;
 5    string x1,x2,y1,y2;
 6    x1 = x.substr(0,len/2);
 7    x2 = x.substr(len/2,len);
 8    y1 = y.substr(0,len/2);
 9    y2 = y.substr(len/2,len);
10    if (len%2==0&&equal(x1,y2,len/2)&&equal(x2,y1,len/2))
11    {
12	return true;
13    }
14    if (len%2==0&&equal(x1,y1,len/2)&&equal(x2,y2,len/2))
15    {
16	return true;
17    }
18    return false;
19}
20int main()
21{
22    cin>>a;
23    cin>>b;
24    len = a.length();
25    if (equal(a,b,len))
26    {
27	puts("YES");
28    }
29    else
30    {
31	puts("NO");
32    }
	return 0;
}