7-3 玻璃管中的小球

有一根笔直的玻璃管和若干小球,初始时玻璃管内是空的,每个小球都有一个权值x,不同小球的权值可能相同。
玻璃管和小球支持以下三个操作:
从玻璃管的右端放入一个小球
从玻璃管的左端取出一个小球
翻转玻璃管:玻璃管原来的左端变为现在的右端,原来的右端变为现在的左端。
现在要开始进行以下操作。
输入格式:
第一行一个正整数q(1<=q<=400000),表示对玻璃管和小球的操作次数,初始时,玻璃管为空。
接下来q行,
若是 1 x,则将一个权值为x的小球从玻璃管右端放入玻璃管(1<=x<=1000000)。
若是 2,则从玻璃管左端取出一个小球(若当前玻璃管为空,则忽略此操作)
若是 3,则翻转玻璃管
输出格式:
对于每个输入输出一行一个整数,为玻璃管左端小球和玻璃管右端小球的权值的异或值(这里的异或是按位异或,运算符为 ‘^’)。
若当前玻璃管为空,则输出-1
输入样例1:

5
1 2
1 3
3
2
2

输出样例1:

0
1
1
0
-1

输入样例2:

4
1 2
3
1 3
3

输出样例2:

0
0
1
1

思路
当时这题一直爆0到最后,为什么呢,因为我结果那又多加了一步c&1。之前做过一道类似的题,当时最后一步好像要c&1。我对于异或理解不太清楚,以为最后结果只有0或1,其实不是的
5^2=(101)^(010)=7
唉,还是基础不扎实,,多练、多练、多练。
代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5,INF=1e8;
int main(){
	deque<int> d;
	int q,flag=1;
	cin>>q;
	while(q--){
		int op,x;
		cin>>op;
		if(op==1){
			cin>>x;
			if(flag==1) d.push_back(x);
			else d.push_front(x);
		}
		else if(op==2){
			if(d.size()){
			if(flag==1) d.pop_front();
			else d.pop_back();				
			}
		}
		else if(op==3) flag=flag*(-1);
		
		if(d.size()==0) cout<<-1<<endl;
		else{
			int a,b;
			a=d.front();
			b=d.back();
			int c=a^b;
			cout<<c<<endl;			
		}		
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值