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

题目大意:判断两个字符串是否等价。

等价的条件(任意一条满足即可):1、两个字符串完全相同

2、把每个字符串分成长度相同的两部分,若a1等价于b1并且a2等价于b2,或者a1等价于b2并且a2等价于b1

由于等价的条件说得很模糊,我卡了不久。等价条件里的第2条的意思是,如果ab两个字符串的两两子串都满足这两个条件,那么ab是等价的(有点绕,对吧),如果我们都已经解读清楚这句话了,显然接下来我们可以递归判断等价了。

首先,如果两个字符串长度不相等,那么肯定不等价;如果当前字符串的长度是奇数,那么我们就可以判断两个字符串是否严格等价了。如果当前两个字符串已经严格相等了,那也就不需要再递归判断了。

#include<cstdio>
#include<cstring>
#define MAXN 200005
using namespace std;
char a[MAXN],b[MAXN];
int len;
bool check(char *s1,char *s2,int len)
{
	int i;
	if(len%2 == 1)
	{
		for(i = 0; i < len; i++)
			if(s1[i] != s2[i])
				return false;
		return true;
	}
	else //递归判断
	{
		return (check(s1,s2,len/2)&&check(s1+len/2,s2+len/2,len/2))||(check(s1,s2+len/2,len/2)&&check(s1+len/2,s2,len/2));
	}
}
int main()
{
	scanf("%s%s",a,b);
	int len1 = strlen(a);
	int len2 = strlen(b);
	if(len1 != len2)
	{
		printf("NO\n");
		return 0;
	}
	if(check(a,b,len1))
		printf("YES\n");
	else
		printf("NO\n");
}

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

时间: 2024-11-09 02:21:36

Codeforces Round #313 (Div. 2) Equivalent Strings(搜索)的相关文章

Codeforces Round #224 (Div. 2) D 暴力搜索加记忆化

题意读了半年,英语太渣,题意是摆两个棋子在棋盘上作为起点,但是起点不能在#上,然后按照图的指示开始走, < 左 > 右 ^上 v下,走的时候只能按照图的指示走,如果前方是 #的话,可以走进去,但是 走进去之后便不能再走了,走的途中两个棋子不能相碰,但是最终都走到同一个#里是没事的,并且若是能走 无限步的话 输出 -1, 例如  > < 这样左右左右的走就能无限走,然后问你 两个棋子走的最大步数的和 一开始被输出-1给困住了,因为除了 .> <这样以外  还可以刚好形成一

Codeforces Round #313 (Div. 2) Gerald&#39;s Hexagon

给出一个六边形六条边的长度(六边形的每个角为120度),求出这个六边形中边长为1的等边三角形有多少个 由于每个角都是120度并且上下两条边是平行的,因此我们可以补出一个矩形,再减掉周边四个角的面积,用剩下面积除以每个小三角形的面积. #include<cstdio> using namespace std; double a,b,c,d,e,f; int main() { <span style="white-space:pre"> </span>s

Codeforces Round #313 (Div. 2) C Gerald&#39;s Hexagon 计数

// Codeforces Round #313 (Div. 2) C Gerald's Hexagon // 计数 // 关键是平行于a1的长度为1的有多少条,中间的这些*2,再加上a1 // 和a4,就是三角形的总和 // 还是挺简单的,注意递增的初始值,和变化,就ac了 #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> using namespac

Codeforces Round #313 (Div. 1)

官方英文题解:http://codeforces.com/blog/entry/19237 Problem A: 题目大意: 给出内角和均为120°的六边形的六条边长(均为正整数),求最多能划分成多少个边长为1的正三角形. 题解: 把六边形补全变成一个正三角形,然后减去三个角的正三角形即可. Problem B: 题目大意: 给出长度相等的两个串AB,定义两个串相等 当且仅当  A=B  或者  当长度为偶数时,A[1...n/2]=B[1...n/2]  && A[n/2+1...n]=

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

比赛链接:http://codeforces.com/contest/560 水笔场... A. Currency System in Geraldion time limit per test:2 seconds memory limit per test:256 megabytes A magic island Geraldion, where Gerald lives, has its own currency system. It uses banknotes of several va

Codeforces Round #313 (Div. 2) 解题报告

A. Currency System in Geraldion: 题意:有n中不同面额的纸币,问用这些纸币所不能加和到的值的最小值. 思路:显然假设这些纸币的最小钱为1的话,它就能够组成随意面额. 假设这些纸币的最小值大于1,那么它所不能组成的最小面额就是1.所以自学求最小值就可以. 我的代码: #include <set> #include <map> #include <cmath> #include <stack> #include <queue

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

A题: 题目地址:Currency System in Geraldion 题意:给出n中货币的面值(每种货币有无数张),要求不能表示出的货币的最小值,若所有面值的都能表示,输出-1. 思路:水题,就是看看有没有面值为1的货币,如果有的话,所有面值的货币都可以通过1的累加得到,如果没有的话,最小的不能表示的就当然是1辣. #include <stdio.h> #include <math.h> #include <string.h> #include <stdli

Codeforces Round #313 (Div. 2) D. Equivalent Strings 解题心得

原题: Description 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 sam

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

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