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 ...
随机推荐
- lwip TCP client 客户端 & FreeRTOS
static void tcpecho_thread(void *arg) { ip_addr_t serverIpAddr; struct netbuf *buf; void *data; u16_ ...
- 原生js创建模态框
1.效果图如下: 2.代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- UIImage指定区域自由拉伸
UIImage的 resizableImageWithCapInsets 可以指定需要拉伸的位置,这个方法很有用,可以减少长短按钮数量
- 常用LLDB指令
print.p: 打印内存地址 po: 打印对象 1.读取内存 memory read/数量格式字节数 内存地址 x/数量格式字节数 内存x/3xw 0x10010 格式:x是16进制,f是浮点, ...
- 20181031noip模拟赛T1
思路: 我们会发现不合法的位置只有两种情况 要么在前半边,要么在后半边 那么,我们将序列劈两次 使两次的长度分别为: (n为偶数时要特判一下,因为根本不可能) (n/2),(n/2+1) (n/2+1 ...
- eclipse 配置
访问地址 https://www.eclipse.org/ . . . 配置工作目录:存放1.项目代码 2.IDE相关配置信息 //修改编码时的字体 //修改编码格式 没有配置to ...
- Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢
在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中
- background-image大小和位置的设置
1.background-position: 当背景图很大时,可以让其固定显示在不同的位置.剩下的会隐藏. 引入背景图片:background-image: url("img/banner. ...
- 如何安装使用MinDoc搭建个人在线wiki文档
MinDoc是什么? MinDoc是一个在线的文档管理系统,该系统适用于团队.个人等使用.开发者最初的目的是为了便于公司内部使用,仿照看云开发.有laravel版本以及golang版本.不过larav ...
- .NET Core On Liunx环境搭建之MongoDB
伴随着.NET Core的开源,Liunx服务器才是.NET 的未来,公司前几天刚刚上新了一台Liunx服务器,我进行了一下环境的搭建,把经验分享出来. 服务器信息: 服务器用的是阿里云服务器,操作 ...