ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【CodeForce】559B Equivalent Strings 等效字符串

2021-04-03 16:57:26  阅读:280  来源: 互联网

标签:aa string Equivalent strings 等效 559B CodeForce 字符串 equivalent


【CodeForce】559B Equivalent Strings 等效字符串

B. Equivalent Strings

time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings a and b of equal length are called equivalent 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!

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

Hint

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

翻译

B.等效字符串

每次测试的时限2秒
每次测试的内存限制256兆字节

输入标准输入

输出标准输出

今天,杰拉尔德(Gerald)在有关字符串的讲座中学习了字符串等效的新定义。在以下两种情况之一中,长度相等的两个字符串a和b被称为等效字符串:

他们是平等的。
如果将字符串a分成大小相同的a 1和a 2的两半,并且将字符串b分成大小相同的b 1和b 2的两半,则以下之一是正确的:
a 1等效于b 1, a 2等效于b 2
a 1等效于b 2, a 2等效于b 1
作为一项家庭任务,老师给了他的学生两根弦,并要求他们确定它们是否相等。

杰拉尔德已经完成了这项家庭任务。现在轮到你了!

输入

输入的前两行包含教师给定的两个字符串。每个字母的长度在1到200 000之间,由小写英文字母组成。字符串长度相同。

输出

如果这两个字符串相等,则打印“ YES ”(不带引号),否则打印“ NO ”(不带引号)。

例子

输入复制

aaba
abaa

输出复制

YES

输入复制

aabb 
abab

输出复制

NO

解释

在第一个示例中,您应该将第一个字符串拆分为字符串“ aa ”和“ ba ”,将第二个字符串拆分为字符串“ ab ”和“ aa ”。“ aa ”等同于“ aa ”;“ ab ”等同于“ ba ”,因为“ ab ” =“ a ” +“ b ”,“ ba ” =“ b ” +“ a ”。

在第二个示例中,第一个字符串可以分为字符串“ aa ”和“ bb ”,它们仅等效于它们自己。这就是为什么字符串“ aabb ”仅等效于自身和字符串“ bbaa ”的原因。

思路

等效有传递性
求出S,T等效字符串中字典序最小的字符串。
若相同,S等效T
若不相同,S不等效T

代码

#include<iostream>
#include<cstdio>
using namespace std;
string a,b;
string stra(int l,int r)
{
	if((r-l+1)&1)return a.substr(l,r-l+1);
	string t1=stra(l,(l+r)>>1),t2=stra(((l+r)>>1)+1,r);
	if(t1<t2)return t1+t2;
	else return t2+t1;
}
string strb(int l,int r)
{
	if((r-l+1)&1)return b.substr(l,r-l+1);
	string t1=strb(l,(l+r)>>1),t2=strb(((l+r)>>1)+1,r);
	if(t1<t2)return t1+t2;
	else return t2+t1;
}
int main()
{
	cin>>a>>b;
	if(stra(0,a.size()-1)==strb(0,b.size()-1))printf("YES");
	else printf("NO");
	return 0;
}

标签:aa,string,Equivalent,strings,等效,559B,CodeForce,字符串,equivalent
来源: https://blog.csdn.net/weixin_46975572/article/details/115417716

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有