博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #313 (Div. 2) D. Equivalent Strings(字符串+递归)
阅读量:7061 次
发布时间:2019-06-28

本文共 2130 字,大约阅读时间需要 7 分钟。

题意:

给两个字符串,判断是否"相等"。

这里”相等“的定义是:1、字符串对应字符相同;

2、将第一个字符串对半分成c1和d1,第二个字符串对半分成c2和d2。

如果c1==c2 && d1==d2 或者c1==d2 && c2==d1则两个字符串相等。

当字符串长度为奇数时,只有两个字符串对应字符相同才相等。

 

分析:

结合题意和样例,可以看出这里的相等是递归定义。显然要用到递归。

但是用string.lengtn()和str.substr(s,e)这些库函数以及cin读入的写法在89组test上tle挂了。。

后来试着用char []来存字符串,用strncpy来截取子字符串。但是要开很多数组,而且字符串长度为200000,

不能开在函数内,不然可能爆内存。。。

其实根本不需要求子串,按照递归定义递归到最底层比较返回即可一步步回溯得到结果啊!

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;char a[200010],b[200010];bool StrEqu(char *s1,char *s2,int l1,int r1,int l2){ for(int i=l1;i<=r1;i++) { if(s1[i]!=s2[l2++]) return false; } return true;}bool solve(char *s1,char *s2,int l1,int r1,int l2,int r2){ int len = r1-l1+1; if(len&1) return StrEqu(s1,s2,l1,r1,l2); else { if(StrEqu(s1,s2,l1,r1,l2)) return true; int mid = len/2; if(solve(s1,s2,l1,l1+mid-1,l2,l2+mid-1) && solve(s1,s2,l1+mid,r1,l2+mid,r2)) return true; if(solve(s1,s2,l1,l1+mid-1,l2+mid,r2) && solve(s1,s2,l1+mid,r1,l2,l2+mid-1)) return true; return false; }}int main(){ scanf("%s%s",&a,&b); int len = strlen(a); if(solve(a,b,0,len-1,0,len-1)) puts("YES"); else puts("NO"); return 0;}
View Code

 

下面是第一次用string敲的代码- -

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;string a,b;bool solve(string s1,string s2){ int len = s1.length(); if(len&1) { if(s1==s2) return true; else return false; } else { if(s1==s2) return true; string c1,c2,d1,d2; c1 = s1.substr(0,len/2); c2 = s1.substr(len/2,len); d1 = s2.substr(0,len/2); d2 = s2.substr(len/2,len); if(solve(c1,d1) && solve(c2,d2)) return true; if(solve(c1,d2) && solve(c2,d1)) return true; return false; }}int main(){ cin>>a>>b; if(solve(a,b)) puts("YES"); else puts("NO"); return 0;}
View Code

 

转载于:https://www.cnblogs.com/hadis-yuki/p/4682525.html

你可能感兴趣的文章
[Linux] Systemd 入门教程:命令篇
查看>>
[Web 前端 ] 五大WEB主流浏览器及四大内核
查看>>
如果仔细观察他们,你会发现他们时时都在锻炼
查看>>
mysql命令自动补全
查看>>
设计模式之简单工厂模式
查看>>
CSDN学院 免费技术答疑公开课,本周六场即将开播~~~
查看>>
计算机组成原理——主存与cache的映射关系
查看>>
让DIV垂直居中的几种办法
查看>>
透视投影的坐标转换与数学推导
查看>>
《我们应当怎样做需求分析》读书笔记
查看>>
JpetStore目录文件关系分析
查看>>
《高性能javascript》学习总结
查看>>
sql ROW_NUMBER() 排序函数
查看>>
用忠诚、时间、奉献来换取一家公司的地位、头衔,以及待遇
查看>>
Sonar Qube QA
查看>>
常见的BLE芯片
查看>>
vim插件安装
查看>>
64位CentOS 6.4下安装wine(32位)
查看>>
hdu5037 Frog (贪心)
查看>>
acdream1421 TV Show (枚举)
查看>>