**男儿何不带吴钩,收取灯塔五十州。
沙场秋点兵:
刘成将军正在排兵布阵,他要将若干个士兵拍成一排,每个士兵都有一个战斗值x,不同士兵的战斗值可能相同。
假设初始时,队伍为空,但是队伍的正方向朝东(若队伍中有士兵,则他们面朝东,即东边是队伍队首,西边是队伍队尾)
刘成将军会发布以下三条命令:
命令一名士兵从队尾插入队伍
命令一名士兵从队首离开队伍(若队伍里面没有士兵,则忽略此操作)
命令队伍向后转(队伍的正方向改变,队首变为队尾,队尾变为队首。)
输入格式:
第一行一个正整数q(1<=q<=400000),表示命令的数量
接下来q行,
若是 1 x,则将一个战斗值为x的士兵从队尾插入队伍(1<=x<=1000000)。
若是 2,则命令一名士兵从队首离开队伍(若当前队伍中没有士兵,则忽略此操作)
若是 3,则命令队伍向后转
输出格式:
对于每个输入输出一行一个整数,为当前队首和队尾两名士兵的战斗值的异或值(这里的异或是按位异或,运算符为 '^')。
若当前队伍为空,则输出-1**
#include<stdio.h>
int main()
{
int a[400000]={0};
int i,j,k,q,m,n,x,s;
int t=-1;
scanf("%d",&q);
for(i=0;i<q;i++){
scanf("%d",&m);
if(m==1){
scanf("%d",&n);
t++;
for(j=q-1;j>0;j--)
a[j-1]=a[j];
a[q-1]=n;
if(a[q-1]==a[q-1-t])x=0;
else x=1;
printf("%d\n",x);
}
else if(m==2){
t--;
if(t<0)printf("-1\n");
else{
if(a[q-1]==a[q-1-t])x=0;
else x=1;
printf("%d\n",x);
}
}
else if(m==3){
for(j=0;j<=(t+1)/2;j++){
s=a[q-1-t];
a[q-1-t]=a[q-1-j];
a[q-1-j]=s;
}
if(a[q-1]==a[q-1-t])x=0;
else x=1;
printf("%d\n",x);
}
}
}