1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int m,n,a[N],f[N],l[N],len; int main() { scanf("%d%d",&m,&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); sort(a+1,a+n+1);a[n+1]=m-1;a[0]=-0x3f3f3f3f; if(m-2==a[n]){while(a[n]==a[n-1]+1)n--;n--;} if(!n){printf("0\n");return 0;} len=1;f[1]=a[n+1]-a[n]-1,l[1]=1; for(int i=n-1;i>=1;i--) { if(a[i]==a[i+1]-1)l[len]++; else len++,f[len]=f[len-1]+a[i+1]-a[i]-1,l[len]=1; } if(a[n]==m-1){printf("%d\n",l[1]);return 0;} int ans=0,ss=0; for(int i=1;i<=len;i++)if(f[i]%2)ans^=l[i]; if(!ans){printf("0\n");return 0;} for(int i=1;i<=len;i++) if(f[i]%2) { if(l[i]>=(l[i]^ans)&&(f[i+1]-1!=f[i]))ss++; } else { if(f[i]-1!=f[i-1]) { if(l[i]>=ans)ss++; } else if(l[i]+l[i-1]>(l[i-1]^ans))ss++; } printf("%d\n",ss); return 0; }
- 1
信息
- ID
- 3731
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者