[loj6500]操作
差分,令$b_{i}=a_{i-1}\oplus a_{i}$,对于一个区间$[l,r]$,相当于令$a_{l-1}=a_{r+1}=0$之后求出$b_{l..r+1}$,对区间$[i-k,i)$异或1这个操作可以看作令$b_{i}$和$b_{i-k}$异或1,要求使得$b_{i}$全部为0
这就相当于要求$\forall 0\le i<k$,$b_{l..r+1}$中模$k$余$i$的位置异或为0,对$v_{0..k-1}$随机赋值,那么可以看作判断$\bigoplus_{l\le i\le r+1,i\equiv j(mod\ k)}b_{i}v_{j}=0$,这个可以用前缀和维护(特别的,要特判$b_{l}=a_{l}$和$b_{r+1}=a_{r}$)
判定完无解后,(若有解)考虑如何求最少操作次数:
假设枚举$i$,对于模$k$余$i$且为1的$b_{j}$,将这些$j$记录下来,写作$pos_{1},pos_{2},...,pos_{2m}$(由于有解,必然是偶数个),答案即为$\frac{\sum_{i=1}^{m}pos_{2i}-pos_{2i-1}}{k}$(可以看作一个1不断向后移动,与之后第一个1相消)
对于相邻的模$k$余$i$的位置必然一正一负,通过前缀和(强制最后一个出现的数符号为正)来维护即可(同样要特判$l$和$r+1$),总复杂度为$o(n+m\log_{2}n)$
对于$l$和$r+1$的特判也可以通过$sum_{i,0/1}$表示假设$b_{i}=0/1$时的答案来避免
(另外要特判$k=1$,此时答案即为区间内1的个数)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2000005
4 #define ll long long
5 int n,t,q,l,r,ans,a[N],b[N],v[N],f[N];
6 ll g[N],sum[N][2];
7 char s[N];
8 int main(){
9 srand(time(0));
10 scanf("%d%d%d%s",&n,&t,&q,s);
11 for(int i=0;i<n;i++)a[i+1]=s[i]-'0';
12 if (t==1){
13 for(int i=1;i<=n;i++)a[i]+=a[i-1];
14 for(int i=1;i<=q;i++){
15 scanf("%d%d",&l,&r);
16 printf("%d\n",a[r]-a[l-1]);
17 }
18 return 0;
19 }
20 for(int i=1;i<=n;i++)b[i]=(a[i-1]^a[i]);
21 for(int i=0;i<t;i++)v[i]=1LL*rand()*rand()%(1<<30);
22 for(int i=1;i<=n;i++)f[i]=(f[i-1]^(b[i]*v[i%t]));
23 for(int i=1;i<=n+1;i++){
24 sum[i][0]=sum[i-1][b[i-1]];
25 sum[i][1]=sum[i-1][b[i-1]]+i-2*g[i%t];
26 if (b[i])g[i%t]=i-g[i%t];
27 }
28 for(int i=1;i<=q;i++){
29 scanf("%d%d",&l,&r);
30 ans=(f[l]^f[r]);
31 if (a[l])ans^=v[l%t];
32 if (a[r])ans^=v[(r+1)%t];
33 if (ans)printf("-1\n");
34 else{
35 if (a[l]!=b[l])printf("%lld\n",(sum[r+1][a[r]]-sum[l][1])/t);
36 else printf("%lld\n",(sum[r+1][a[r]]-sum[l-1][b[l-1]])/t);
37 }
38 }
39 return 0;
40 }
[loj6500]操作的更多相关文章
- LOJ6500. 「雅礼集训 2018 Day2」操作(哈希+差分)
题目链接 https://loj.ac/problem/6500 题解 区间取反 \(01\) 串的经典套路是差分.我们令 \(b_i = a_i\ {\rm xor}\ a_{i - 1}\)(\( ...
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- Sql Server系列:分区表操作
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
随机推荐
- TWAIN-v2.4-说明文档翻译(2)技术概览
技术概览 Technical Overview TWAIN架构(TWAIN Architecture) 数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application ...
- logstash输出到rabbitmq
场景 将应用日志文件发送到rabbitmq. filebeat 不支持rabbitmq作为输出.因此,需要先将文件由filebeat发送到logstash ,再由logstash 输出到rabbitm ...
- 【学习转载】MyBatis源码解析——日志记录
声明:转载自前辈:开心的鱼a1 一 .概述 MyBatis没有提供日志的实现类,需要接入第三方的日志组件,但第三方日志组件都有各自的Log级别,且各不相同,但MyBatis统一提供了trace.deb ...
- Java(35)IO特殊操作流&Properties集合
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228454.html 博客主页:https://www.cnblogs.com/testero ...
- Python技法3:匿名函数、回调函数和高阶函数
1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数 ...
- SharkCTF2021 The_nature_of_the_human
(信安数基的quiz1写不出来 来这放题解泄愤) crypto类题. 题面 其加密的大致过程是,对明文flag中的逐个字符,随机使用三种加密方式: 第一种,对该字符进行sha256加密后以16进制形式 ...
- 【数据结构与算法Python版学习笔记】树——相关术语、定义、实现方法
概念 一种基本的"非线性"数据结构--树 根 枝 叶 广泛应用于计算机科学的多个领域 操作系统 图形学 数据库 计算机网络 特征 第一个属性是层次性,即树是按层级构建的,越笼统就越 ...
- Scrum Meeting 1补充会议
日期:2021年04月24日 会议主要内容概述: 本次会议于11:30举行,对项目架构做出了重要调整,并根据该调整修改了第1次例会报告中后两日计划完成的工作部分. 一.架构调整 会上讨论了用户模块相关 ...
- CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建
疫情之下的高速公路管控重任 江苏高速公路信息工程有限公司(以下简称:江苏高速信息)成立于 2002 年,是江苏交通控股旗下,专业从事高速公路领域机电系统集成.智能交通软硬件研发.大数据分析运营的高新技 ...
- 21.6.23 test
省选 模拟赛 今天考的是一套题目背景和描述会被[数据删除]的模拟赛. 犯了几个傻逼错. \(T1\) 把两种情况的概率看反了,写的暴力.\(35->5\) pts. \(T2\) 以为想到了正解 ...