bzoj 1188: [HNOI2007]分裂游戏
2016-03-02 22:54
302 查看
#include<cstdio> #include<iostream> #include<cstring> using namespace std; bool ma[10009]; int n,T,f[30],a[30]; int work(int a1) { if(f[a1]!=-1) return f[a1]; memset(ma,0,sizeof(ma)); for(int i=a1+1;i<=n;i++) for(int j=i;j<=n;j++) ma[work(i)^work(j)]=1; for(int i=0;;i++) if(!ma[i]) { f[a1]=i; return i; } } int main() { scanf("%d",&T); for(;T;T--) { int tot,ans; tot=ans=0; scanf("%d",&n); memset(f,-1,sizeof(f)); f =0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) if(a[i]&1) ans^=work(i); for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) for(int k=j;k<=n;k++) { if((ans^work(i)^work(j)^work(k))!=0) continue; if(!tot) printf("%d %d %d\n",i-1,j-1,k-1); tot++; } if(!tot) printf("-1 -1 -1\n"); printf("%d\n",tot); } return 0; }
博弈游戏,先求出所有节点的sg值,再枚举每一种拿的可能性,改变总sg值,如果总改变后sg值为0,那就是一种方案。
相关文章推荐
- ajax操作流程
- Android布局中的layout_weight和weightSum属性的详解及使用
- Android Studio 出现 cannot resolve symbol R 解决方案
- Educational Codeforces Round 9 F. Magic Matrix 最小生成树
- 假期实践作业:从IT角度看地铁
- 卖菜也能有新招
- homework1-st
- nigix 安装报错
- ajax&json实现二级下拉框联动,简单示例
- 【算法】单源最短路——SPFA
- Android学习之dip、dp、sp、pt和px
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- VS无法启动 IISExpress web 服务器
- 仿购物车的实现
- 基础数据类型长度
- java异常面试常见题目
- django model中get()和filter()方法的区别
- [BZOJ2908] 又是nand (树链刨分)
- Android围住神经猫的实现
- VLAN