[zjoi2003]密码机
2024-08-30 07:20:09
一台密码机按照以下的方式产生密码:首先往机器中输入一系列数,然后取出其中一部分数,将它们异或以后得到一个新数作为密码。现在请你模拟这样一台密码机的运行情况,用户通过输入控制命令来产生密码。
密码机中存放了一个数列,初始时为空。密码机的控制命令共有3种:
ADD <Number>
把<Number>加入到数列的最后。
REMOVE <Number>
在数列中找出第一个等于<Number>的数,把它从数列中删除。
XOR BETWEEN <Number1> AND <Number2>
对于数列中所有大于等于<Number1>并且小于等于<Number2>的数依次进行异或,输出最后结果作为密码。如果只有一个数满足条件,输出这个数。如果没有任何数满足条件,输出0。
你可以假设用户不会REMOVE一个不存在于数列中的数,并且所有输入的数都不超过20000
这题有点智商题的感觉;
xor运算符满足一个性质,就是一个数连续xor一个数两次,这个数不变;
可以利用树状数组,每次add或remove直接xor就行,find的时候找到right的xor结果,left的xor结果,两个再xor,这样重复的就会直接消掉;
实现很简单,想通就行了;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define LL long long
const int n=;
int c[n];
int lowbit(int x){return x&-x;}
void add(int x,int y){while(x<=n){c[x]^=y;x+=lowbit(x);}}
int find(int x){int ans=;while(x>){ans^=c[x];x-=lowbit(x);}return ans;}
int read(){
int x=;bool flag=;char ch=getchar();
while(ch<''||ch>''){ch=getchar();if(ch=='-')flag=;}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return flag?-x:x;
}
void init(){
char s[];
while(scanf("%s",s)!=EOF){
if(s[]=='A'||s[]=='R'){
int x=read();
add(x,x);
}
if(s[]=='X'){
int x=read(),y=read();
if(x>y){
printf("0\n");
continue;
}
int p=find(x-),q=find(y);
cout<<(p^q)<<endl;
}
}
}
int main(){
init();
}
最新文章
- NTFS交换数据流隐写的应用
- 关于mongoDB的思考和nodeJS执行windows系统命令
- 使用autotools系列工具自动部署源代码编译安装
- Android WebView访问SSL证书网页(onReceivedSslError)
- ListView的addAll方法
- Codevs 1081 线段树练习2
- apache开源项目--dbutils
- PHP初学留神(一)
- 排序算法简介及其C实现
- BZOJ 2196: [Usaco2011 Mar]Brownie Slicing( 二分答案 )
- 长安大学ACM竞赛部
- JavaScript DOM编程艺术-学习笔记
- CSS3秘笈:第十一章
- 【poj解题】3663
- linux 下 Fatal error: Class ‘mysqli’ not found in
- JAVA_SE基础——5.第一个Java程序HelloWorld&注释的应用
- SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
- css中bfc和ifc
- redist命令操作(一)--键key,字符串String
- oracle基础函数--decode
热门文章
- 牛客网 牛客小白月赛1 C.分元宵-快速幂
- 洛谷——P2404 自然数的拆分问题
- maven项目对于maven远程仓库没有资源的解决办法
- Hystrix的介绍和简单使用
- BZOJ3270 博物館 概率DP 高斯消元
- this.class.getClassLoader().getResourceAsStream
- PHP平均小数红包算法
- 用Redis存储Tomcat集群的Session(转载)
- 【Protocol Buffers】grpc默认使用的Google 开源的一套成熟的结构数据序列化机制
- 一天时间用OpenFire打造自己的IM聊天工具