记录编号 |
124761 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAA |
题目名称 |
[POI 2004]平板游戏 |
最终得分 |
100 |
用户昵称 |
Chenyao2333 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.862 s |
提交时间 |
2014-10-05 21:16:04 |
内存使用 |
4.13 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN=1e6+10;
int M,N;
vector<pair<int,int> >SZS;
int Pos[MAXN];
void init(){
scanf("%d %d",&M,&N);
for(int i=1;i<=N;i++){
scanf("%d",&Pos[i]);
}
}
int case2(){
int num=1;
for(int i=N-1;i>=1 && Pos[i]==Pos[i+1]-1;i--)
num++;
return num;
}
int case3(){
int k=0;
int tmp=0;
Pos[N+1]=M-1;
for(int i=N;i>=1;i--){
if(Pos[i]==Pos[i+1]-1){
tmp++;
}else{
SZS.push_back(make_pair(k,tmp));
tmp=1;
k+=Pos[i+1]-Pos[i]-1;
}
}
if(tmp) SZS.push_back(make_pair(k,tmp));
int sg=0;
for(int i=0;i<SZS.size();i++){
int pos=SZS[i].first, num=SZS[i].second;
if(pos%2==0)continue;
sg^=num;
}
if(sg==0)return 0;
int ans=0;
for(int i=0;i<SZS.size();i++){
int pos=SZS[i].first, num=SZS[i].second;
if(pos==0) continue;
for(int j=1;j<=num;j++){
if(pos%2){
int tmp_sg=sg;
tmp_sg^=num;
tmp_sg^=num-j;
if(tmp_sg==0) ans++;
}else{
int last=0;
if(i>1 && SZS[i-1].first==pos-1)
last=SZS[i-1].second;
int tmp_sg=sg;
tmp_sg^=last;
tmp_sg^=last+j;
if(tmp_sg==0) ans++;
}
}
}
return ans;
}
void work(){
int ans;
if(Pos[N]==M) ans=0;
else if(Pos[N]==M-1) ans=case2();
else ans=case3();
printf("%d\n",ans);
}
int main(){
//freopen("in.txt","r",stdin);
freopen("gra.in","r",stdin);
freopen("gra.out","w",stdout);
init();
work();
return 0;
}