CF1320D Reachable Strings
110和011互相转化,相当于就是0在连续两个1的情况下,移动两个位置
能够发现,0的位置的奇偶不会改变,且很多个0之间的相对位置不会改变
猜想考虑这个答案只跟0的奇偶性有关,下面小证一下:(注意下面所说的“奇偶”指的是两个字符串的分别第一个字母为奇数时的奇偶,不是总字符串的奇偶)
若0的相对位置奇偶不一样,显然非法
若0的相对位置奇偶一样,是否合法?假定我们把两个字符串的0都尽可能往左移动,再判断是否相等,这个方法正确性显然。
现在假设我已经将两个字符串尽可能把0往右移动了,如果是非法情况,也就是说有一个字符串无法移动到下一个和它奇偶性相同且另外一个字符串的存在0的那个位置,那么子串不可能出现连续两个1,必然会有0将他们隔断,然后就不符合上面假设的相对位置奇偶相同了
所以,直接对奇偶比较是正确的,直接奇偶起点分别哈希就行了,实现题解有很多,具体实现注意求一段子串哈希并不能用传统的方式求
#include<bits/stdc++.h>
#define il inline
#define maxn 200005
using namespace std;
typedef long long ll;
const int base=131;
const ll mod=998244353;
il int read(){
char c;int x=0,f=0;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))x=(x*10)+(c^48),c=getchar();
return f?-x:x;
}
int n;
char s[maxn];
ll hs1[maxn],hs2[maxn],bs[maxn],id[maxn];
il int geths(int l,int r,int p){
if(p)return ((hs1[r]-hs1[l-1]*bs[id[r]-id[l-1]]%mod)%mod+mod)%mod;
else return ((hs2[r]-hs2[l-1]*bs[id[r]-id[l-1]]%mod)%mod+mod)%mod;
}
int main(){
n=read();
scanf("%s",(s+1));
bs[0]=1;
for(int i=1;i<=n;i++){
bs[i]=(bs[i-1]*base)%mod,id[i]=id[i-1];
if(s[i]=='1')hs1[i]=hs1[i-1],hs2[i]=hs2[i-1];
else{
hs1[i]=hs1[i-1]*base+1+(i&1),hs1[i]%=mod;
hs2[i]=hs2[i-1]*base+1+((i&1)^1),hs2[i]%=mod;
id[i]++;
}
}
int t=read();
while(t--){
int l1=read(),l2=read(),len=read();
int r1=l1+len-1,r2=l2+len-1;
geths(l1,r1,l1&1)==geths(l2,r2,l2&1)?puts("Yes"):puts("No");
}
return 0;
}
/*
3
010
1
1 3 1
*/
CF1320D Reachable Strings的更多相关文章
- 题解-Reachable Strings
题解-Reachable Strings 前置知识: \(\texttt{Hash}\) Reachable Strings 给一个长度为 \(n\) 的 \(\texttt{01}\) 串 \(s\ ...
- CF1320 Div1 D.Reachable Strings 题解
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...
- Codeforces Round #625 (1A - 1D)
A - Journey Planning 题意: 有一列共 n 个城市, 每个城市有美丽值 b[i], 要访问一个子序列的城市, 这个子序列相邻项的原项数之差等于美丽值之差, 求最大的美丽值总和. ...
- 【Virt.Contest】CF1321(div.2)
第一次打虚拟赛. CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\ ...
- Hacker Rank: Two Strings - thinking in C# 15+ ways
March 18, 2016 Problem statement: https://www.hackerrank.com/challenges/two-strings/submissions/code ...
- StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?
StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing t ...
- Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- [LeetCode] Add Strings 字符串相加
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...
- [LeetCode] Encode and Decode Strings 加码解码字符串
Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...
- [LeetCode] Group Shifted Strings 群组偏移字符串
Given a string, we can "shift" each of its letter to its successive letter, for example: & ...
随机推荐
- C# dotnet 的锁 SemaphoreSlim 和队列
本文主要是试验在顺序进入等待 SemaphoreSlim 的任务是否会按照顺序经过锁执行 我在一个有趣的WPF程序里面,需要限制任务同时执行的线程数量,不然用户就会说用我的程序会让电脑卡渣.而我的任务 ...
- 5.prometheus监控--监控nginx
1.监控程序环境准备 mkdir /data/docker-compose -p cd /data/docker-compose cat > docker-compose.yaml <&l ...
- 他又来了,.net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布,快来打造你的私人智能家居吧
背景介绍 hi 大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk[Homekit.Net]1.0.0发布,快来 ...
- 路由跳转报错:Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated",...
记录一个路由跳转的报错: 将换成
- CF877F Ann and Books (分类统计贡献+普通莫队)
CF877F Ann and Books 题意: 商店里有 \(n\) 本书,每本书中有 \(a_i\) 个 \(t_i=1/2\) 类问题. \(m\) 次询问,每次询问给出一个区间,求有多少个符合 ...
- AI 编译器CINN中的OpLowering优化Pass
一.Lower 主逻辑 在 OpLower::Lower() 接口中,主要分为两大类: Elementwise类,主要涉及的 OpPattern 包括:kElementwise .kBroadcast ...
- 微信小程序使用微信云托管添加自定义域名并转发到pexels.com
背景:我要在小程序上显示pexels.com上的图片,然后我得先把pexels.com的域名添加到小程序的request合法域名中,但是pexels.com是国外的,在国内没有备案所以添加不了.解决方 ...
- 说一下flex的属性
flex-grow项目的放大比例,默认为0,即如果存在剩余空间,也不放大. flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小.负值对该属性无效. flex-bas ...
- 鸿蒙Blank
Blank组件占剩余空间,类似占位组件一样
- 得物 ZooKeeper SLA 也可以 99.99%
1. 背景 ZooKeeper(ZK)是一个诞生于 2007 年的分布式应用程序协调服务.尽管出于一些特殊的历史原因,许多业务场景仍然不得不依赖它.比如,Kafka.任务调度等.特别是在 Flink ...