Codeforces Round #313 (Div. 1) B. Equivalent Strings DFS暴力

题目链接:

http://codeforces.com/contest/559/problem/B

题意:

判断俩字符串是否相似,相似的条件如下:
a1+a2=A,a1和a2都是A的一半
b1+b2=B,同理
如果A,B相等,那么相似
如果A的长度为偶数{
  如果a1与b1,a2与b2相似或者a1与b2,b1与a2相似
  那么A,B相似
}
否则不相似

题解:

dfs

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 #define MS(a) memset(a,0,sizeof(a))
 5 #define MP make_pair
 6 #define PB push_back
 7 const int INF = 0x3f3f3f3f;
 8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
 9 inline ll read(){
10     ll x=0,f=1;char ch=getchar();
11     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
12     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
13     return x*f;
14 }
15 //////////////////////////////////////////////////////////////////////////
16 const int maxn = 2e5+10;
17 
18 char s1[maxn],s2[maxn];
19 
20 bool check(char x[],char y[],int len){
21     bool isok = 1;
22     for(int i=0; i<len; i++)
23         if(x[i]!=y[i])
24             isok = 0;
25     return isok;
26 }
27 
28 bool equ(char x[],char y[],int len){
29     if(check(x,y,len)) return 1;
30 
31     if(len%2 == 0)
32         return (equ(x,y+len/2,len/2)&&equ(x+len/2,y,len/2)) ||
33                 (equ(x+len/2,y+len/2,len/2)&&equ(x,y,len/2));
34     return 0;
35 }
36 
37 int main(){
38     cin >> s1 >> s2;
39     if(equ(s1,s2,strlen(s1))) puts("YES");
40     else puts("NO");
41 
42     return 0;
43 }

 

posted @ 2017-02-27 12:11  _yxg123  阅读(142)  评论(0编辑  收藏  举报