2016 CCPC 东北地区重现赛

时间:2022-09-25 14:11:12

1、 2016 CCPC 东北地区重现赛

2、总结:弱渣,只做出01、03、05水题

08   HDU5929 Basic Data Structure    模拟,双端队列

1、题意:模拟一个栈的操作,并在每次询问时,计算栈项到栈底元素nand位运算的值。

2、总结:思路就是看距离栈底最近的0的后面1的个数的奇偶。试了好多种办法,最后还是双端队列简便。总之,贼恶心的题。。

#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<stack>
#include<vector>
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
#define pb push_back
using namespace std;
const int N=,MAX=; int main()
{
int t,n,x,flag,tot1,tot2,a[N];
char str[];
deque<int >DQ;
scanf("%d",&t);
FF(cas,,t){
DQ.clear();
flag=;
tot1=((N>>)-),tot2=(N>>);
scanf("%d",&n);
printf("Case #%d:\n",cas);
while(n--){
scanf("%s",str);
if(str[]=='S'){
scanf("%d",&x);
if(!flag){
if(!x)DQ.push_back(tot1);
a[tot1--]=x;
}else {
if(!x)DQ.push_front(tot2);
a[tot2++]=x;
}
} else if(str[]=='O'){
if(!flag){
tot1++;
if(!a[tot1])DQ.pop_back();
}else {
tot2--;
if(!a[tot2])DQ.pop_front();
}
} else if(str[]=='R'){
flag^=;
} else {
if(tot2-tot1-==)puts("Invalid.");
else if(DQ.empty()) cout<<((tot2-tot1-)%)<<endl;
else {
if(!flag){
cout<<((tot2-DQ.front()-+(tot1+!=DQ.front()))%)<<endl;
}else {
cout<<((DQ.back()-tot1-+(DQ.back()!=tot2-))%)<<endl;
}
}
}
}
} return ;
}