【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)
几个性质
我们通过推式子可以发现:
\]
\]
也就是说:
性质一: \(B,C\)可以相互转换。
则我们再次推式子可以发现:
\]
也就是说:
性质二: 在\(B\)或\(C\)之前可以任意加或减少若干个\(A\)。
同样,我们可以发现:
\]
也就是说:
性质三: 在\(B\)或\(C\)之前可以任意加偶数个\(B\)或\(C\)。
有了这些性质,你以为就做完了吗?
闪指导\(hl666\)曰:“不!现在才刚刚开始!”
分类讨论
由上面性质一可见,我们可以把所有的\(C\)都看成\(B\),这样就只有两种字母了。
接下来我们讨论哪些情况是无解的:
若两个区间中\(B\)的数量的奇偶性不同,就无解(因为只能加偶数个\(B\))。
若第一个区间中\(B\)的数量大于第二个区间中\(B\)的数量,就无解(因为无法减少\(B\)的数量)。
但这里还需要注意,若出现如\(BAA\)和\(BA\)这样的情况,即二者\(B\)数量相同,第一个区间中\(A\)的数量大于第二个区间中\(A\)的数量,且差值不为\(3\)的倍数(此时可以直接消\(A\)),就无解(因为要消去末尾\(A\)必须把某个\(A\)变成\(BB\),第一个区间中\(B\)的数量就大于了第二个区间中\(B\)的数量)。
若第一个区间中末尾\(A\)的数量小于第二个区间中末尾\(A\)的数量,就无解(因为无法增加末尾\(A\)的数量)。
这里同样要注意,若出现如\(A\)和\(BBA\)这样的情况,即二者某位\(A\)数量相同,第一个区间中没有\(B\)且第二个区间中有\(B\),就无解(因为必须要消末尾\(A\)来产生\(B\),第一个区间中末尾\(A\)的数量就小于了第二个区间中末尾\(A\)的数量)。
剩余情况就是有解了。
代码
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 5000000
using namespace std;
int n,m,s[N+5][2],p[N+5][2];char s1[N+5],s2[N+5];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
I void reads(char *x) {RI t=0;W(isspace(c=tc()));W(x[++t]=c,!isspace(c=tc())&&~c);}
}F;
int main()
{
freopen("change.in","r",stdin),freopen("change.out","w",stdout);
RI Qt,i,x1,y1,x2,y2,t1,t2,p1,p2;F.reads(s1),F.reads(s2),n=strlen(s1+1),m=strlen(s2+1);//读入
for(i=1;i<=n;++i) s[i][0]=s[i-1][0],s1[i]^65?(++s[i][0],p[i][0]=0):(p[i][0]=p[i-1][0]+1);//求第一个字符串每个位置B数量的前缀和以及每个位置前连续出现的A的个数
for(i=1;i<=m;++i) s[i][1]=s[i-1][1],s2[i]^65?(++s[i][1],p[i][1]=0):(p[i][1]=p[i-1][1]+1);//求第二个字符串每个位置B数量的前缀和以及每个位置前连续出现的A的个数
F.read(Qt);W(Qt--) F.read(x1,y1,x2,y2),//读入询问
t1=s[y1][0]-s[x1-1][0],t2=s[y2][1]-s[x2-1][1],//差分求出两个区间中B的数量
p1=min(p[y1][0],y1-x1+1),p2=min(p[y2][1],y2-x2+1),//求出末尾A的数量,注意向区间长度取min
putchar(((t1^t2)&1||t1+2*(p1>p2&&(p1-p2)%3)>t2||p1-(!t1&&t2)<p2)?'0':'1');//输出判断结果
return 0;
}
【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)的更多相关文章
- 【2019.7.25 NOIP模拟赛 T3】树(tree)(dfs序列上开线段树)
没有换根操作 考虑如果没有换根操作,我们该怎么做. 我们可以求出原树的\(dfs\)序列,然后开线段树维护. 对于修改操作,我们可以倍增求\(LCA\),然后在线段树上修改子树内的值. 对于询问操作, ...
- 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)
打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...
- 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)
暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...
- 【2019.7.24 NOIP模拟赛 T1】道路建设(road)(水题)
原题与此题 原题是一道神仙不可做题,两者区别在于,原题不能有重边和自环. 然而,这题可以有重边... 于是这题就变成了一道大水题. 此题的解法 考虑如何构造. 对于\(n\le10^4\)的情况: 对 ...
- 【2019.7.26 NOIP模拟赛 T1】数字查找(figure)(数学)
推式子 我们设\(n=kp+w\),则: \[(kp+w)a^{kp+w}\equiv b(mod\ p)\] 将系数中的\(kp+w\)向\(p\)取模,指数中的\(kp+w\)根据欧拉定理向\(p ...
- 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...
- 【2019.7.15 NOIP模拟赛 T1】夹缝(mirror)(思维题)
思维题 此题应该是比较偏思维的. 假设一次反射后前进的距离是\(2^x(2y+1)\),则显然,它可以看做是前进距离为\(2^x\)的光线经过了\((2y+1)\)次反射,两者是等价的,甚至后者可能还 ...
- 2019.7.26 NOIP 模拟赛
这次模拟赛真的,,卡常赛. The solution of T1: std是打表,,考场上sb想自己改进匈牙利然后wei了(好像匈牙利是错的. 大力剪枝搜索.代码不放了. 这是什么神仙D1T1,爆蛋T ...
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
随机推荐
- VS2019 远程调试
碰到一个问题,在本机调试没有任何问题,部署到测试环境的CentOS 7 上,抛出异常.为解决这个问题,使用远程调试. 第一步,设置远程链接 第二步,Debug--Attach to Process ...
- webpack打包教程(一)常用loader详解
1.打包图片 // { // test: /\.(png|jpe?g|gif)$/i, // use: [{ // loader: 'file-loader', // options: { // na ...
- 图片转PDF
目的:图片转pdf(image2pdf)依赖:fpdf.php 网址 为 http://fpdf.org/ 有文档和包 demo:step 1 : First download fpdf librar ...
- 明解JAVA 第一章答案
练习1-1 无法运行 练习1-2 package candle1220; class Nightwatch{ public static void main(String[] args) { Syst ...
- Java代理类Proxy的用法
代理(proxy) 利用代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 何时使用代理 假设有一个表示接口的Class对象(有可能只包含一 ...
- virsh 查看信息
获取域网络接口信息 virsh domiflist debian8 获取vcpu信息 virsh vcpuinfo debian8 设定内存最大内存 virsh setmaxmem debian8 9 ...
- mysql 开启慢查询及其用mysqldumpslow做日志分析
mysql慢查询日志是mysql提供的一种日志记录,它是用来记录在mysql中相应时间超过阈值的语句,就是指运行时间超过long_query_time值的sql,会被记录在慢查询日志中.long_qu ...
- 【深度学习】计算机视觉中的 Single-Scale 和 Multi-Scale
Single-Scale:是指把一张图片送到 CNN : Multi-Scale:一般会送到 CNN 十张图片:比如高宽是 256 Χ 256 的图片,Multi-Scale会在它的四个角以及中心裁剪 ...
- 2019-11-25-如何在国内发布-UWP-应用
原文:2019-11-25-如何在国内发布-UWP-应用 title author date CreateTime categories 如何在国内发布 UWP 应用 lindexi 2019-11- ...
- xiaohacontainer, docker, windows-来自微软Azure CTO的布道
https://azure.microsoft.com/zh-cn/blog/containers-docker-windows-and-trends/ 今天这个时代当你讨论云计算时,不谈谈docke ...