【题目】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=;
int n,m,sa[maxn],sb[maxn],ta[maxn],tb[maxn];
char s[maxn],t[maxn];
int main(){
scanf("%s%s",s+,t+);
n=strlen(s+);m=strlen(t+);
for(int i=;i<=n;i++){
if(s[i]=='A')sa[i]=sa[i-]+;
sb[i]=sb[i-]+(s[i]=='B'||s[i]=='C');
}
for(int i=;i<=m;i++){
if(t[i]=='A')ta[i]=ta[i-]+;
tb[i]=tb[i-]+(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+,sa[r]);Sb=sb[r]-sb[l-];//
scanf("%d%d",&l,&r);
Ta=min(r-l+,ta[r]);Tb=tb[r]-tb[l-];
if(Tb<Sb||((Tb&)!=(Sb&))||Ta>Sa)printf("");else
if((Ta<Sa&&Tb>Sb)||(!(Tb>&&!Sb)&&(Sa-Ta)%==))printf("");else
printf("");
}
return ;
}

【CodeForces】947 D. Picking Strings的更多相关文章

  1. 【CodeForces】947 C. Perfect Security 异或Trie

    [题目]C. Perfect Security [题意]给定长度为n的非负整数数组A和数组B,要求将数组B重排列使得A[i]^B[i]的字典序最小.n<=3*10^5,time=3.5s. [算 ...

  2. 【CODEFORCES】 C. Dreamoon and Strings

    C. Dreamoon and Strings time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. 【Codeforces】Round #491 (Div. 2) 总结

    [Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...

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

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

  5. 【codeforces】【比赛题解】#948 CF Round #470 (Div.2)

    [A]Protect Sheep 题意: 一个\(R*C\)的牧场中有一些羊和一些狼,如果狼在羊旁边就会把羊吃掉. 可以在空地上放狗,狼不能通过有狗的地方,狼的行走是四联通的. 问是否能够保护所有的羊 ...

  6. 【CodeForces】601 D. Acyclic Organic Compounds

    [题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...

  7. 【Codeforces】849D. Rooter's Song

    [算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...

  8. 【CodeForces】983 E. NN country 树上倍增+二维数点

    [题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...

  9. 【CodeForces】925 C.Big Secret 异或

    [题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...

随机推荐

  1. Linux安装weblogic

    一.软件安装 1. 安装前的准备工作 1.1 首先请确认您要安装的WebLogic版本所在的平台已通过了BEA的认证,完整的认证平台列表请参考 http://e-docs.bea.com/wls/ce ...

  2. Additinal Dependencies和#pragma comment(lib,"*.lib")的分析

     网上.一些书上也写道,这两种方式作用一样.其实仔细分析,它们两者还是有非常大的差异的. Additinal Dependencies和#pragma comment(lib,"*.lib& ...

  3. 将Python项目生成所有依赖包的清单requirements .txt文件

    在开发中不同的项目总会牵扯到各种不同作用的包安装,下面是总结一下对写好的项目自动生成依赖清单,以及在新环境下解决依赖的方法: 一:生成所有依赖清单requirements.txt 这里需要使用到的工具 ...

  4. shell 一些符号的使用

    给你个全的,你在Linux环境下多试下就明白了:$0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式 ...

  5. javascript+html5+css3下拉刷新 数据效果

    文章摘自:suchso.com/projecteactual/javascript-html5-css3-taobao-xiala-data.html segmentfault.com/a/11900 ...

  6. 第210天:node、nvm、npm和gulp的安装和使用详解

    一.node 1.什么是node? 它不是JS文件,也不是JS框架,而是Server side JavaScript runtime,当服务端的一个JS文件运行时,会被NODE拦截,在NODE中运行J ...

  7. Arrays.toString 如果传入的是对象 那么调用的是此对象的toString

    Arrays.toString(Object[] obj) 如果传入参数的是对象 那么调用的是此对象的toString

  8. 转---秒杀多线程第五篇 经典线程同步 关键段CS

    上一篇<秒杀多线程第四篇 一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题. 本文首先介绍下如何使用关键段,然 ...

  9. RabbitMQ 使用详细介绍

    1. 实现最简单的队列通信 2. producer端 # !/usr/bin/env python import pika #通过这个实例,先去建立一个socket,默认端口15672 connect ...

  10. 【题解】APIO2014回文串

    哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ...