Codeforces Round #313 (Div. 2)560D. Equivalent Strings

原创 2016年08月31日 10:10:23
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 strings a and b of equal length are calledequivalent in one of the two cases:

  1. They are equal.
  2. 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:
    1. a1 is equivalent to b1, and a2 is equivalent to b2
    2. 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!

Input

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.

Output

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

Examples
input
aaba
abaa
output
YES
input
aabb
abab
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".

#include <bits/stdc++.h>
using namespace std;
#define maxn 200010
char a[maxn], b[maxn];
bool dfs(char s1[], char s2[], int len){
    if(!strncmp(s1, s2, len)) return 1;
    if(len % 2 == 1) return 0;
    int m = len/2;
    if(dfs(s1+m, s2, m)&&dfs(s1, s2+m, m)) return 1;
    if(dfs(s1, s2, m)&&dfs(s1+m, s2+m, m)) return 1;
}
int main(){
    scanf("%s %s", a, b);
    int len = strlen(a);
    if(dfs(a, b, len)) printf("YES\n");
    else printf("NO\n");
}


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

Codeforces Round #313 (Div. 2) D. Equivalent Strings(简单搜索)

D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes i...

Codeforces 560D Equivalent Strings【Dfs】

D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes i...

CodeForces - 560D Equivalent Strings (DFS)

Description Today on a lecture about strings Gerald learned a new definition of string equivalency....

【24.34%】【codeforces 560D】Equivalent Strings

time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandar...

Codeforces Round #313 (Div. 2)(A,B,C,D)

A题: 题目地址:Currency System in Geraldion 题意:给出n中货币的面值(每种货币有无数张),要求不能表示出的货币的最小值,若所有面值的都能表示,输出-1. 思路:水...

Codeforces Round #358 (Div. 2) D. Alyona and Strings (DP)

题目链接:点击打开链接 Description After returned from forest, Alyona started reading a book. She noticed str...

Codeforces Round #358 (Div. 2) D. Alyona and Strings

After returned from forest, Alyona started reading a book. She noticed strings s and t, lengths of w...

Codeforces Round #358 (Div. 2) -- D. Alyona and Strings (DP)

D. Alyona and Strings time limit per test 2 seconds memory limit per test 256 megabytes input sta...

Codeforces Round #313 (Div. 2) C

题目链接 题意:  有一个六边形,给你6条边的长度(顺时针给出),每条边都是整数,问你它可以被分割成几个单位长度的正三角形  (题目保证给出的数据可以被分割) 思路: 六边形可以被分割成两种...

Codeforces Round #313 (Div. 2) (ABCD)

A题意: 给你n种货币,问用这n中货币能否组成所有的价值,如果可以输出-1,否则输出最小的不能组成的价值。 解析: 做这个题目的时候还思考了一会儿,后来发现,所有如果没有1的话,那么就算有任何...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #313 (Div. 2)560D. Equivalent Strings
举报原因:
原因补充:

(最多只允许输入30个字)