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题,字符串,规律的更多相关文章

  1. hdu - 6277,2018CCPC湖南全国邀请赛B题,找规律,贪心找最优.

    题意: 给出N个小时,分配这些小时去写若干份论文,若用1小时写一份论文,该论文会被引用A次,新写一篇论文的话,全面的论文会被新论文引用一次. 找最大的H,H是指存在H遍论文,而且这些论文各被引用大于H ...

  2. hdu - 6281,2018CCPC湖南全国邀请赛F题,快排

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6281 题意: 根据已给出的式子,进行排序,然后输出排完序后原先的下表. 题解:用结构体保存,在用结构体 ...

  3. hdu - 6276,2018CCPC湖南全国邀请赛A题,水题,二分

    题意: 求H的最大值,  H是指存在H篇论文,这H篇被引用的次数都大于等于H次. 思路:题意得,  最多只有N遍论文,所以H的最大值为N, 常识得知H的最小值为0. 所以H的答案在[0,N]之间,二分 ...

  4. HDU 4597 Play Game 2013 ACM-ICPC吉林通化全国邀请赛H题

    九野的博客,转载请注明出处:  http://blog.csdn.net/acmmmm/article/details/10833941 题意:给定T个测试数据,下面有2副牌,每副n张,每张都有一个分 ...

  5. CCPC2018-湖南全国邀请赛 G String Transformation

    G.String Transformation 题目描述 Bobo has a string S = s1 s2...sn consists of letter a , b and c . He ca ...

  6. 2014湘潭全国邀请赛I题 Intervals /POJ 3680 / 在限制次数下取有权区间使权最大/小问题(费用流)

    先说POJ3680:给n个有权(权<10w)开区间(n<200),(区间最多数到10w)保证数轴上所有数最多被覆盖k次的情况下要求总权最大,输出最大权. 思路:       限制的处理:s ...

  7. Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解

    题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...

  8. 2017湘潭大学邀请赛G题(贪心+优先队列)

    参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...

  9. hdu 5443 (2015长春网赛G题 求区间最值)

    求区间最值,数据范围也很小,因为只会线段树,所以套了线段树模板=.= Sample Input3110011 151 2 3 4 551 21 32 43 43 531 999999 141 11 2 ...

随机推荐

  1. PLSQL 误删表恢复操作

    本文转载于:https://blog.csdn.net/qiushuichangtian888/article/details/10911249

  2. GoogleTest初探(0)

    单元测试是一种保证代码质量的手段.程序员可以通过写单元测试来保证自己写的代码的功能正确. 本人所在公司使用GoogleTest测试框架来进行单元测试.虽然现在在公司的工程代码中写单元测试已经驾轻就熟, ...

  3. Z字形编排问题详解(C++)

    Z字形编排问题详解(C++): 问题描述:给定一个矩阵matrix,输出矩阵matrix进行Z字形编排后的内容. 原矩阵: 输出形式: 算法分析与详细解答: 要解决这样一个问题,可能一开始无从下手,但 ...

  4. CentOS6安装各种大数据软件 第八章:Hive安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. 【Memcached】原理、体系架构、基本操作及路由算法

    1. 什么是Memcached 要了解Memcached首先要到官网上去看官方对它的描述.Memcached的官网网站是:http://memcached.org/,官方对Memcached的描述如下 ...

  6. windows下开启 PHP扩展Redis

    Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  7. Sql主从同步服务

    主服务器A:192.168.1.102从服务器B:192.168.1.103 先关掉主服务器phpstudy,把数据库备份到从服务器 1.授权用户:在A服务器新建一个从账号锁定IP GRANT REP ...

  8. Flume(1)-概述与组成架构

    一. 定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活简单. 二. 优点 1. 可以和任意集中式存储进程集成. 2. ...

  9. MySQL数据库实验:任务一 创建数据库和表

    目录 任务一 创建数据库和表 [实训目的与要求] [实训原理] [实训步骤] 一.熟悉MySQL环境 二.利用MySQL命令行窗口创建数据库及表 三.利用界面工具创建数据库及表 任务一 创建数据库和表 ...

  10. python列表的通用操作

    #'+'和'*'#+可以将两个列表拼接为一个列表my_list = [1,2,3]+[4,5,6]#*可以将列表重复指定的次数my_list = [1,2,3]*5 print(my_list) #创 ...