bzoj1188: [HNOI2007]分裂游戏
2017-04-02 15:45
239 查看
传送
4000
门
明显博弈论。
而且当且仅当a[i]&1时会影响sg函数
所以我们记忆化搜索求出sg函数。(暴力枚举分裂到的位置)
然后枚举第一步的方案,xor一下==0为合法方案。
代码超短。
4000
门
明显博弈论。
而且当且仅当a[i]&1时会影响sg函数
所以我们记忆化搜索求出sg函数。(暴力枚举分裂到的位置)
然后枚举第一步的方案,xor一下==0为合法方案。
代码超短。
#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using namespace std; int b[20005],sg[30],t,ans,tot,x,n; inline void pre(){ sg[1]=0; for (int i=2;i<26;i++){ memset(b,0,sizeof(b)); for (int j=1;j<i;j++) for (int k=1;k<=j;k++) b[sg[j]^sg[k]]=1; for (int j=0;;j++) if (!b[j]){ sg[i]=j; break; } } } int main(){ pre(); scanf("%d",&t); while (t--){ scanf("%d",&n); ans=tot=0; for (int i=1;i<=n;i++){ scanf("%d",&x); if (x%2) ans^=sg[n-i+1]; } for (int i=1;i<=n;i++) for (int j=i+1;j<=n;j++) for (int k=j;k<=n;k++) if (!(ans^sg[n-i+1]^sg[n-j+1]^sg[n-k+1])){ tot++; if (tot==1) printf("%d %d %d\n",i-1,j-1,k-1); } if (!tot) printf("-1 -1 -1\n"); printf("%d\n",tot); } }
相关文章推荐
- [BZOJ1188][HNOI2007]分裂游戏(博弈论)
- bzoj1188 [HNOI2007]分裂游戏
- BZOJ1188: [HNOI2007]分裂游戏(洛谷P3185)
- [BZOJ1188][HNOI2007]分裂游戏
- bzoj1188 [HNOI2007]分裂游戏
- BZOJ 1188 [HNOI 2007]分裂游戏 (博弈)
- bzoj 1188 : [HNOI2007]分裂游戏 sg函数
- bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
- BZOJ 1188 [HNOI2007]分裂游戏 SG函数
- bzoj 1188: [HNOI2007]分裂游戏(sg函数)
- bzoj1188: [HNOI2007]分裂游戏
- BZOJ 1188 [HNOI2007]分裂游戏
- BZOJ 1188: [HNOI2007]分裂游戏
- [SG函数] BZOJ1188: [HNOI2007]分裂游戏
- BZOJ1188 [HNOI2007]分裂游戏(SG定理)
- [BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】
- BZOJ1188 [HNOI2007]分裂游戏(SG函数)
- 【SG函数】BZOJ1188(HNOI2007)[分裂游戏]题解
- [BZOJ1188][HNOI2007]分裂游戏(SG函数)
- bzoj1188 [HNOI2007]分裂游戏