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

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

2015-07-23 00:55 639 查看

B. Equivalent Strings

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

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

Description

Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings a and b of equal length are calledequivalent in one of the two cases:

They are equal.

If we split string a into two halves of the same size a1 and a2, and string b into two halves of the same size b1 and b2, then one of the following is correct:
a1 is equivalent to b1, and a2 is equivalent to b2

a1 is equivalent to b2, and a2 is equivalent to b1

As a home task, the teacher gave two strings to his students and asked to determine if they are equivalent.

Gerald has already completed this home task. Now it's your turn!

[b]Input[/b]

The first two lines of the input contain two strings given by the teacher. Each of them has the length from 1 to 200 000 and consists of lowercase English letters. The strings have the same length.

[b]Output[/b]

Print "YES" (without the quotes), if these two strings are equivalent, and "NO" (without the quotes) otherwise.

[b]Sample Input[/b]

aaba
abaa

[b]Sample Output[/b]

YES

HINT

[b]题意
[/b]

判断俩字符串是否相似,相似的条件如下:

a1+a2=A,a1和a2都是A的一半

b1+b2=B,同理

如果A,B相等,那么相似

如果A的长度为偶数{

  如果a1与b1,a2与b2相似或者a1与b2,b1与a2相似

  那么A,B相似

}

否则不相似

[b]题解:[/b]

就如同题目讲的一样,傻逼暴力DFS就好了

不要想多了

[b]代码[/b]

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=200005;
char A[MAXN],B[MAXN];
bool cmp(char x[],char y[],int len)
{
//printf("%d %d\n",x-A,y-B);
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)
{
//printf("%d %d %d\n",x-A,y-B,len);
if(cmp(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,y,len/2)&&equ(x+len/2,y+len/2,len/2));
return 0;
}
int main()
{
scanf("%s%s",A,B);
int len=strlen(A);
printf("%s\n",equ(A,B,len) ? "YES" : "NO");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: