【题目】D. Picking Strings

【题意】给定只含'A','B','C'的字符串,支持以下变换:1.A - BC   2.B - AC   3.C - AB   4.AAA - empty string(左边变成右边)

给定S串和T串,q次询问,每次给出S串的一个子串x和T串的一个子串y,求x是否能变到y。n,m,q<=10^5。

【算法】模拟???

【题解】观察一些规律,首先B和C等价:B-AC-AAB-AAAC-C。

然后B前面的A可以消除:AB-AAC-AAAB-B。

所以新的变换:1.A - BB   2.B - AB   3.AB - B   4.AAA - empty string

总结出以下规律:

1.B前可以增减A。

2.在已有B的基础上,B的数量增加任意偶数。

依靠以上两点,我们就只剩下末尾A的问题:末尾A无法制造,所以策略是保留和目标串末尾数量相同的A,然后剩余的变化最后一个A或%3消除。下面假设从S变到T

1.如果[T串的B少] 或 [两串B的奇偶性不同] 或 [T串的末尾A多],无解。

删除末尾相当数量的A后:

2.决定变化最后一个A,若满足[T串的B较多] 和 [S串还有A],有解。

3.决定%3消除,除了%3=0还需要满足[不存在 S串无B而T串有B ]的情况,有解。(这是因为没有B时B不能凭空出现,就必须变化最后一个A)

4.否则,无解。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
int n,m,sa[maxn],sb[maxn],ta[maxn],tb[maxn];
char s[maxn],t[maxn];
int main(){scanf("%s%s",s+1,t+1);n=strlen(s+1);m=strlen(t+1);for(int i=1;i<=n;i++){if(s[i]=='A')sa[i]=sa[i-1]+1;sb[i]=sb[i-1]+(s[i]=='B'||s[i]=='C');}for(int i=1;i<=m;i++){if(t[i]=='A')ta[i]=ta[i-1]+1;tb[i]=tb[i-1]+(t[i]=='B'||t[i]=='C');}int Q;scanf("%d",&Q);while(Q--){int l,r,Sa,Sb,Ta,Tb;scanf("%d%d",&l,&r);Sa=min(r-l+1,sa[r]);Sb=sb[r]-sb[l-1];//
        scanf("%d%d",&l,&r);Ta=min(r-l+1,ta[r]);Tb=tb[r]-tb[l-1];if(Tb<Sb||((Tb&1)!=(Sb&1))||Ta>Sa)printf("0");elseif((Ta<Sa&&Tb>Sb)||(!(Tb>0&&!Sb)&&(Sa-Ta)%3==0))printf("1");elseprintf("0");}return 0;
}

View Code

转载于:https://www.cnblogs.com/onioncyc/p/8545415.html

【CodeForces】947 D. Picking Strings相关推荐

  1. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  2. 【Codeforces】925A Stairs and Elevators【贪心】

    [Codeforces]925A Stairs and Elevators [题目大意] 在一个n*m的矩阵里,有clcl个楼梯和cece个电梯,电梯和楼梯可以到任意一层,给出clcl个楼梯的位置和c ...

  3. 【CodeForces】[546A]Soldier and Bananas

    直接运算 并没有什么弯 注意int就足以储存数据 不需要借钱时(n>res) 输出 0 #include<stdio.h> int main() {int k,n,w;while(s ...

  4. 【CodeForces】445B A Lot of Games 字典树博弈

    传送门:[CodeForces]445B  A Lot of Games 题目大意:两人一起构造一个串,每人每次向串的末尾放一个字母,必须保证放了这个字母后能够成所给的N个串的前缀,如果某个人不能放时 ...

  5. 【Codeforces】1080C Masha and two friends (棋盘染色)

    http://codeforces.com/problemset/problem/1080/C 给定一个棋盘,(1,1)的位置是白色,观察可以知道,如果横纵坐标之和是偶数,那么是白色,奇数的话就是黑色 ...

  6. 【Codeforces】【161Div2】

    [题目来源]http://www.codeforces.com/contest/263 [A. Beautiful Matrix] [解析]模拟即可.按照题目的意思,找到1所在的位置(x, y),然后 ...

  7. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...

  8. 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)

    人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...

  9. 【CodeForces】576 C. Points on Plane

    [题目]C. Points on Plane [题意]给定坐标系中n个点的坐标(范围[0,10^6]),求一种 [ 连边形成链后总长度<=2.5*10^9 ] 的方案.n<=10^6. [ ...

最新文章

  1. conda的导入导出
  2. js获取用户当前所在城市(ip)
  3. 鸿蒙安装elasticsearch7,安装操作系统_岁寒,然后知松柏之后凋也的技术博客_51CTO博客...
  4. Visual studio 2013安装及单元测试
  5. ECShop 安装问题 谁能帮帮我
  6. 通过channel进行goroutine间的通信
  7. 敏捷开发系列学习总结(16)——给Scrum Master的十个建议
  8. ZooKeeper 到底解决了什么问题?
  9. 两年数据对比柱形图_视频教程:堆积柱形图的几种变化形式
  10. HTML格式及W3C验证工具
  11. java-贪吃蛇小游戏
  12. html css笔记zht
  13. Flex使用ribbit.com的服务给手机发送短信SMS
  14. html显示隐藏图片,简单的图片显示与隐藏
  15. 华为交换机查光衰_华为交换机硬件信息查看命令
  16. 奥特曼系列ol如何进老服务器,《奥特曼系列OL》新手攻略
  17. TiDB 如何在 LVS FULL NAT 模式下显示客户端真实 IP
  18. 黑马就业班(02.JavaWeb+项目实战\18.LinuxNginx)
  19. 发光二极管的keil代码c语言,用Keil点亮一个发光二极管
  20. ultimatedefrag 6汉化版(磁盘碎片整理) v6.0.62.0

热门文章

  1. 卖设备 免费报价的网站
  2. linux2.4.18内核定时器的使用
  3. 动态规划之0-1背包问题
  4. 使用游标逐行更新数据
  5. 在别的函数或者线程函数里使用 PostMessage
  6. ping命令 仿源码实现 以及几个 命令的 使用
  7. 框架中要懂的一些术语
  8. 大数据之-Hadoop3.x_MapReduce_开发总结---大数据之hadoop3.x工作笔记0137
  9. axios介绍---axios工作笔记001
  10. MQTT工作笔记0006---CONNECT控制报文3