您的位置:首页 > 产品设计 > UI/UE

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

2017-02-27 12:11 218 查看

题目链接:

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

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MS(a) memset(a,0,sizeof(a))
#define MP make_pair
#define PB push_back
const int INF = 0x3f3f3f3f;
const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
//////////////////////////////////////////////////////////////////////////
const int maxn = 2e5+10;

char s1[maxn],s2[maxn];

bool check(char x[],char y[],int len){
bool isok = 1;
for(int i=0; i<len; i++)
if(x[i]!=y[i])
isok = 0;
return isok;
}

bool equ(char x[],char y[],int len){
if(check(x,y,len)) return 1;

if(len%2 == 0)
return (equ(x,y+len/2,len/2)&&equ(x+len/2,y,len/2)) ||
(equ(x+len/2,y+len/2,len/2)&&equ(x,y,len/2));
return 0;
}

int main(){
cin >> s1 >> s2;
if(equ(s1,s2,strlen(s1))) puts("YES");
else puts("NO");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces dfs