暑假集训 T3 与非
问题 C: 与非
时间限制: 2 Sec 内存限制: 256 MB
提交: 54 解决: 34
[提交][状态][讨论版]
题目描述
作为一名新世纪共产主义的接班人,你认识到了资本主义的软弱性与妥协性,决定全面根除资本主义,跑步迈入共产主义。但是当你即将跨入共产主义大门的时候,遇到了万恶的资本家留下的与非电路封印,经过千辛万苦的研究,你终于把复杂的破解转变成了以下问题:
初始时你有一个空序列,之后有N个操作。
操作分为一下两种:
1 x:在序列末尾插入一个元素x(x=0或1)。
2 L R:定义nand[L,R]为序列第L个元素到第R个元素的与非和,询问nand[L,L]^nand[L,L+1]^nand[L,L+2]^......^nand[L,R]。
Nand就是先与,再取反
输入
从文件nand.in中读入数据。
输入第一行一个正整数N,表示操作个数。
接下来N行表示N个操作。
为了体现程序的在线性,记lastans为上一次操作二的回答,初始lastans=0,。对于操作1,你需要对x异或lastans。对于操作二,设现在序列中的元素个数为M,如果lastans=1,那么你需要作如下操作:L=M-L+1,R=M-R+1,swap(L,R)
输出
输出到nand.out中。
输出有多行。为对于每一个操作二的回答。
样例输入
61 11 11 02 1 22 1 32 2 3
样例输出
100
提示
【数据规模和约定】
数据点 N的规模 操作一的个数M1 操作二的个数M2
1 N<=1000 M1<=500 M2<=500
2 N<=1000 M1<=500 M2<=500
3 N<=200000 M1<=100000 M2<=100000
4 N<=200000 M1<=100000 M2<=100000
5 N<=1000000 M1<=900000 M2<=100000
第四眼,还是看有没有什么 一颗赛艇 的性质吧 = =
最后,爆零 = = ,性质找错了 好尴尬 是我太弱了
题解:*@***#**@* 什么真值表,线段树,都去死吧 。 。 。
神一般的做法:
要求的是[L,R] 区间内的值,考虑到异或具有可减性,我们可以用sum[r]-sum[l-1] 来求得
可减性 : 1^1^0^0^1^1^0^1^0 ==1
1^1^0^0 ==0
求 1^1^0^1^0 =(1^1^0^0^1^1^0^1^0)^(1^1^0^0) ==1
原因:连续的1,0异或结果只与1个数的奇偶性有关,奇则为1,偶则为0.(不信试一试)
Then 易得nand[i,j]=!(nand[i,j-1]&val[j])
设f[i] 表示nand[1,i] , sum[i]=f[1]^f[2]^……^f[n]。
考虑 两个式子 !(val[l]&val[l+1]) !(f[l]&val[l+1])
若 val[l]==f[l] 则再往后 结果都一样 所以 ans=sum[r]^sum[l-1]
若 val[l]! =f[l] 则一个为1,另一个为0 再往后 若 val[i] ==1 则两个值 又1—>0,0—>1;
一直保持不同,但一旦遇到0,二者均变为1 再往后则一直保持一致,我们需要考虑
在连续的 1—>0,0—>1过程中两个式子出现一的次数是否一致,
若一致 ans=sum[r]^sum[l-1], 若不一致 ans=sum[r]^sum[l-1]^1
接下来考虑如何统计1的个数,设从l往后第一个0的下标为pos,则之前两式交替出现0,1的次数即为pos-l
若(pos-l)%2==0 则两式出现一的次数相等 ans=ans=sum[r]^sum[l-1];
若(pos-l)%2==1 无论谁多一个1,谁少一个1,秩序再^1即可, ans=ans=sum[r]^sum[l-1]^1;
第一个0的下标可以用链表在读入时求得,O(1)即可得到其下标。链表具体实现过程留给读者思考(代码)
总之,这道题很考思维,代码量却很小,很不错。
最后%一发大佬lc
代码如下:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int M=4000000+10;
int n,ans,cnt,p;
int pre[M],nxt[M];
bool sum[M],f[M],val[M];
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
}
int main(){n=read();for(int i=1;i<=n;i++){int opt,l,r;opt=read();if(opt==1){l=read()^ans;val[++cnt]=l;if(!val[cnt]){nxt[p]=cnt;p=cnt;}else pre[cnt]=p;if(cnt==1)f[1]=sum[1]=val[cnt];else{f[cnt]=!(f[cnt-1]&val[cnt]);sum[cnt]=sum[cnt-1]^f[cnt];}}else{l=read();r=read();if(ans==1){l=cnt-l+1;r=cnt-r+1;swap(l,r);}if(l==r) {printf("%d\n",ans=(int)val[l]);continue;}if(val[l]==f[l]) {printf("%d\n",ans=sum[r]^sum[l-1]);continue;}else{int pos=nxt[pre[l]];if(val[l]==0) pos=nxt[l];pos=min(pos-1,r);int pd=pos-l+1;if(pd&1) {printf("%d\n",ans=sum[r]^sum[l-1]^1);continue;}else {printf("%d\n",ans=sum[r]^sum[l-1]);continue;}}}}return 0;
}
暑假集训 T3 与非相关推荐
- 暑假集训考试反思+其它乱写
7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...
- 2016暑假集训总结
Preface 这是蒟蒻lyd729在初二升初三的暑假里训练的总结. 来看看一年前的lyd729写的暑假集训总结(链接),真是觉得自己长大了好多. 这一年发生了太多故事.(我来讲故事啦) 去年,一升初 ...
- 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)
系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...
- 暑假集训后的一些感想
在开学一个星期后我终于还是写下了这篇有关暑假集训博客,暑假集训的开始时间是七月十八号,是放暑假后的第三个星期.也就是说刚放假时我们还都回家了两个星期,快乐的玩耍了一阵子.随着时间的推移,时间来到七月十 ...
- ACM暑假集训总结(2014年夏)
ACM暑假集训总结 这篇总结本来是打算暑假集训结束后, UVa上刷够300题, 给这一路留个纪念, 可最后竟然给了自己个大耳光--298. Hehe. 既然打算写了,那该干的就得干. 一个耳光没打够, ...
- 2016暑假集训小结
小结 暑假集训之前,有很多事情在忙,什么考试,**之类.集训开始的时候还回了一趟家,这趟回家也发生了对我影响最大的事,之后想了很久,觉得也还是有必要继续走下去,因为我还是很爱这个集训队,很爱思考题解题 ...
- 2015暑假集训总结
这个暑假,我很明显的感觉,我的许多方面都发现了缺陷或得到了提升. 首先是做比赛.做题策略方面的,我还有很多要改进的地方.比赛时,我总是想到一些有些神奇的想法,有时会接近正解或者就是,有时会相差甚远,打 ...
- 2014暑假集训总结
为期五个星期的暑假集训就这么结束了,如果说寒假的集训是为我们挖了一个个大坑,那么暑假的集训就只能说是宇宙大爆炸了.到了现在才发现,寒假我们学习的东西仅仅只是皮毛而已,这次学习的高级数据结构,真的是把我 ...
- 2019暑假集训感触与收获
记得我们的集训开始时间是8.19,然后我提前了两天过来了学校,想着为充实的集训先做点准备...没想到的是在饥饿中度过了漫长的48小时(旁边的食堂木有开门,懒得走辣么远还是自己太懒了),还好两天也挺快, ...
最新文章
- 户外生活--西湖林至千军台
- qt creator无法删除文件怎么办?(需要在cmakelists文件里配置)
- Objective-C中深拷贝与浅拷贝简述
- 【报告分享】2022跨境电商行业趋势报告.pdf(附下载链接)
- mediacodec延时_FFmpeg优化点播延时方案
- 热修复 阿里的AndFix
- 手把手教你搭建Android开发环境
- 编程珠玑java_编程珠玑第八章
- Word自动目录中包含公式如何去掉?
- 广告中的CPM、CPC、CPA解释
- 爬虫,酷我音乐接口解析
- 联想计算机不识别硬盘分区,联想笔记本进PE不识别硬盘
- 微信支付的架构到底有多牛?
- 用.Net Core接入微信公众号开发
- 针对文件流转Base64的操作
- 基于多智能体模型的街道步行空间量化研究
- 国微大学php,国微CMS学校网站系统(学校版) v20191205
- flink 并行度。
- windows系统有线连接网络,再连入wify后,优先使用wify
- 魔兽插件修改服务器名字,《私人定制》如何制作自己心仪的插件