Codeforces313 Equivalent Strings(DFS)

D. Equivalent Strings

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Today on a lecture about strings Gerald learned a new definition of string equivalency. Two stringsa 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 anda2, and stringb into two halves of the same size b1 andb2, then one of the following is correct:a1 is equivalent to b1, anda2 is equivalent tob2a1 is equivalent to b2, anda2 is equivalent tob1

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!

Input

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

Output

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

Sample test(s)

input

aabaabaa

output

YES

input

aabbabab

output

NO

Note

In the first sample you should split the first string into strings "aa" and "ba", the second one — into strings "ab" and "aa". "aa" is equivalent to "aa"; "ab" is equivalent to "ba" as "ab" = "a" + "b", "ba" = "b" + "a".

In the second sample the first string can be splitted into strings "aa" and "bb", that are equivalent only to themselves. That’s why string "aabb" is equivalent only to itself and to string "bbaa".

题意:

对于两个等长的字符串a,b,字符串相等,分为两种情况,①字符对应位置一一相等。②把两个字符串劈分别成等长的两段,如果两段相等,那么这两个字符串相等。

思路:

如果字符串的长度是奇数,只需判断对应位置是否一一相等,如果是偶数,,用dfs进行递归,利用②判断是否相等。

代码:

#include<cstdio>#include<cstring>//#include<string.h>using namespace std;int const maxn=200010;char a[maxn],b[maxn];int dfs(char *a,char *b,int l){if(strncmp(a,b,l)==0)return 1;if(l%2)return 0;int p=l/2;if(dfs(a,b+p,p)&&dfs(a+p,b,p)||dfs(a,b,p)&&dfs(a+p,b+p,p))return 1;return 0;}int main(){int len,flag;while(scanf("%s",a)!=EOF){scanf("%s",b);len=strlen(a);flag=dfs(a,b,len);if(flag)printf("YES\n");elseprintf("NO\n");}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

大理的洱海形如人耳,风平浪静时,

Codeforces313 Equivalent Strings(DFS)

相关文章:

你感兴趣的文章:

标签云: