hdu - 6282,2018CCPC湖南全国邀请赛G题,字符串,规律
HDU – 6282
http://acm.hdu.edu.cn/showproblem.php?pid=6282
by Hzu_Tested
题意:给出两个字符串S和T,只由a,b,c三种字符组成(不为空串,长度不一定相同,不一定包含所有字符)。对字符串S可以进行几种操作:在任意位置添加/删除字符串aa,bb,abab。问字符串S是否能通过以上几种操作变成T,输出Yes/No。
思路:字符串变化的问题,先找出所有可行的操作:添加/删除aa,bb,abab,即只能添加/删除偶数个a/b,无法添加/删除c,那么如果S和T的字符c的个数不等则一定是No。
再看到第一个样例ab->ba,则ba->ab也可行(添加和删除互为逆操作),发现隐藏操作ab<-->ba。

那么ab的位置关系就无所谓了,因为可以随意交换ab的位置(没有c的情况下),则只剩ab的个数关系需要比较,又因为可以任意添加/删除偶数个a/b,则ab的个数关系只需要比较奇偶性即可。
那么,对于没有字符c的串str1和str2,只要str1中a的个数的奇偶和str2中a的个数的奇偶相同,且str1中b的个数的奇偶和str2中b的奇偶相同,则str1和str2就能相互转换。
对于有字符c的情况,只需以每个c作为分割,比较每一个子串即可。

所有对应子串都能相互转换,则S和T能相互装换。
(比较暴力的写法,不是很好看...)
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = +;
char str[maxn];
int strc[maxn];
int cnt1;
char goal[maxn];
int goalc[maxn];
int cnt2; int main() {
while(scanf("%s",str)!=EOF) {
scanf("%s",goal);
int len = strlen(str);
cnt1 = ;
strc[cnt1++] = -;
for(int i=;i<len;++i) {
if(str[i]=='c') {
strc[cnt1++] = i;
}
}
int len2 = strlen(goal);
cnt2 = ;
goalc[cnt2++] = -;
for(int i=;i<len2;++i) {
if(goal[i]=='c') {
goalc[cnt2++] = i;
}
}
bool ok = false;
if(cnt1==cnt2) {
ok = true;
int a1,b1,a2,b2;
for(int i=;i<cnt1;++i) {
a1 = , b1 = , a2 = , b2 = ;
for(int j=strc[i-]+;j<strc[i];++j) {
if(str[j]=='a'){
++a1;
} else if(str[j]=='b') {
++b1;
}
}
for(int j=goalc[i-]+;j<goalc[i];++j) {
if(goal[j]=='a') {
++a2;
} else if(goal[j]=='b') {
++b2;
}
}
if(a1%!=a2% || b1%!=b2%) {
ok = false;
break;
}
}
if(ok) {
a1 = , b1 = , a2 = , b2 = ;
for(int i=strc[cnt1-]+;i<len;++i) {
if(str[i]=='a') {
++a1;
} else if(str[i]=='b') {
++b1;
}
}
for(int i=goalc[cnt2-]+;i<len2;++i) {
if(goal[i]=='a') {
++a2;
} else if(goal[i]=='b') {
++b2;
}
}
if(a1%!=a2% || b1%!=b2%) {
ok = false;
}
}
}
printf("%s\n",ok?"Yes":"No");
}
return ;
}
Accept Code
要注意,如果有cnt个c,那么需要比较的子串一共有cnt+1,不要少比较了。
hdu - 6282,2018CCPC湖南全国邀请赛G题,字符串,规律的更多相关文章
- hdu - 6277,2018CCPC湖南全国邀请赛B题,找规律,贪心找最优.
题意: 给出N个小时,分配这些小时去写若干份论文,若用1小时写一份论文,该论文会被引用A次,新写一篇论文的话,全面的论文会被新论文引用一次. 找最大的H,H是指存在H遍论文,而且这些论文各被引用大于H ...
- hdu - 6281,2018CCPC湖南全国邀请赛F题,快排
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6281 题意: 根据已给出的式子,进行排序,然后输出排完序后原先的下表. 题解:用结构体保存,在用结构体 ...
- hdu - 6276,2018CCPC湖南全国邀请赛A题,水题,二分
题意: 求H的最大值, H是指存在H篇论文,这H篇被引用的次数都大于等于H次. 思路:题意得, 最多只有N遍论文,所以H的最大值为N, 常识得知H的最小值为0. 所以H的答案在[0,N]之间,二分 ...
- HDU 4597 Play Game 2013 ACM-ICPC吉林通化全国邀请赛H题
九野的博客,转载请注明出处: http://blog.csdn.net/acmmmm/article/details/10833941 题意:给定T个测试数据,下面有2副牌,每副n张,每张都有一个分 ...
- CCPC2018-湖南全国邀请赛 G String Transformation
G.String Transformation 题目描述 Bobo has a string S = s1 s2...sn consists of letter a , b and c . He ca ...
- 2014湘潭全国邀请赛I题 Intervals /POJ 3680 / 在限制次数下取有权区间使权最大/小问题(费用流)
先说POJ3680:给n个有权(权<10w)开区间(n<200),(区间最多数到10w)保证数轴上所有数最多被覆盖k次的情况下要求总权最大,输出最大权. 思路: 限制的处理:s ...
- Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解
题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...
- 2017湘潭大学邀请赛G题(贪心+优先队列)
参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...
- hdu 5443 (2015长春网赛G题 求区间最值)
求区间最值,数据范围也很小,因为只会线段树,所以套了线段树模板=.= Sample Input3110011 151 2 3 4 551 21 32 43 43 531 999999 141 11 2 ...
随机推荐
- Node 192.168.248.12:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
[root@node00 src]# ./redis-trib.rb add-node --slave --master-id4f6424e47a2275d2b7696bfbf8588e8c4c3a5 ...
- 编译nginx错误:make[1]: *** [/pcre//Makefile] Error 127
--with-pcre=DIR 是设置源码目录,而不是编译安装后的目录.
- ODI使用流程
---恢复内容开始--- ODI流程 Topology 1.建立 源 物理结构体系 2.建立 目的 物理结构体系 步骤同上 3.建立 源 逻辑架构 4.建立 目的 逻辑架构 步骤同上 Designer ...
- ztree案例笔记:用户不规范操作导致添加不了节点的问题
我使用ztree开发了简码"万能助手",经过一段时间的观察,发现有个别用户不看教程就开始操作,总能给我折腾出一些让人哭笑不得的问题. 比如,把某个根栏目里的节点全删除,然后发现添加 ...
- CF451E Devu and Flowers(组合数)
题目描述 Devu想用花去装饰他的花园,他已经购买了n个箱子,第i个箱子有fi朵花,在同一个的箱子里的所有花是同种颜色的(所以它们没有任何其他特征).另外,不存在两个箱子中的花是相同颜色的. 现在De ...
- Android Studio 2.3.3 出现Error:(26.13) Fail to resole: com.android.support.appcompat永久解决方法
Android Studio 出现Error(26.13):Fail to resole:com.android.support.appcompat-v7.28_ Install Repository ...
- Bootstrap源码解读之栅格化篇
本文纯属自己研究所写笔记,如果有错误还请多多指教提出 版心(container) 版心:class名为.container的容器,其版心的宽度在各个屏幕设备下是不一样的值,版心两边就是留白. 各尺寸下 ...
- 使用mock.js进行数据模拟
mock.js的文档真的是无力吐槽,只说明API怎么使用,完全不说明mock.js这个工具怎么用到项目里面,最有意思的是google的大部分文章复制官网的API,不管是react还是Vue都是下面的流 ...
- Linux单用户CS模型TCP通讯完全注释手册
Linux单用户CS模型TCP通讯完全注释手册 server 描述 实现一个简单的Linux单用户CS通讯,客户端发送一串字符串,服务器将其转换为大写后返回. server 代码 ``` #inclu ...
- A1033
找出最小开销. 思路: 出发点的加油站编号设为0,终点的加油站编号设为n,其他加油站编号按距离依次排序. 如果0号加油站的距离!=0,则无法出发,行驶距离为0. 从起点开始,寻找规则为,如果存在油价小 ...