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)

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

Codeforces 560D Equivalent Strings【Dfs】

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

【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

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

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...

CF560D Equivalent Strings 可拆分的字符串是否等价

http://codeforces.com/contest/560/problem/D Today on a lecture about strings Gerald learn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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