【SG函数】BZOJ1188(HNOI2007)[分裂游戏]题解
来源:互联网 发布:淘宝申请售后能成功吗 编辑:程序博客网 时间:2024/06/05 03:45
题目概述
游戏规则:共有
解题报告
Orz Lynstery,什么都会。我们要把每颗豆子独立开来,那么一颗在
那么如果
ps:最好倒着存SG函数,这样就不用每次都计算了。
示例程序
#include<cstdio>using namespace std;const int maxn=21;int te,n,a[maxn+5],sg[maxn+5],vis[maxn*maxn+5],ans;int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); for (int i=1;i<=maxn;i++) { for (int j=i-1;j;j--) for (int k=j;k;k--) vis[sg[j]^sg[k]]=i; while (vis[sg[i]]==i) sg[i]++; } for (scanf("%d",&te);te;te--) { scanf("%d",&n);for (int i=n;i;i--) scanf("%d",&a[i]);ans=0; for (int i=n;i;i--) if (a[i]) for (int j=i-1;j;j--) for (int k=j;k;k--) { a[i]--;a[j]++;a[k]++;int nim=0; for (int t=1;t<=n;t++) nim^=(a[t]&1)?sg[t]:0; if (nim==0) {if (!ans) printf("%d %d %d\n",n-i,n-j,n-k);ans++;} a[i]++;a[j]--;a[k]--; } if (!ans) puts("-1 -1 -1");printf("%d\n",ans); } return 0;}
阅读全文
0 0
- 【SG函数】BZOJ1188(HNOI2007)[分裂游戏]题解
- BZOJ1188 [HNOI2007]分裂游戏(SG函数)
- [SG函数] BZOJ1188: [HNOI2007]分裂游戏
- [BZOJ1188][HNOI2007]分裂游戏(博弈SG函数)
- BZOJ1188 [HNOI2007]分裂游戏(SG定理)
- bzoj1188: [HNOI2007]分裂游戏
- [BZOJ1188][HNOI2007]分裂游戏
- bzoj1188 [HNOI2007]分裂游戏
- bzoj1188: [HNOI2007]分裂游戏
- bzoj1188[HNOI2007]分裂游戏
- bzoj1188 [HNOI2007]分裂游戏
- BZOJ 1188 [HNOI2007]分裂游戏 SG函数
- bzoj 1188: [HNOI2007]分裂游戏 sg函数
- BZOJ1188: [HNOI2007]分裂游戏(洛谷P3185)
- bzoj 1188: [HNOI2007]分裂游戏(sg函数)
- bzoj1188 分裂游戏 博弈论
- 【BZOJ1188】分裂游戏,博弈
- 1188: [HNOI2007]分裂游戏
- nginx+tomcat+redis完成session共享
- C语言程序内存四区(栈区,堆区,全局区,代码区)
- Oracle基础知识2 : 单表查询2(内置函数)
- Android WebView用法和WebView加载提升网页速度
- vue初级知识点总结
- 【SG函数】BZOJ1188(HNOI2007)[分裂游戏]题解
- 如何用 Java 实现 Web 应用中的定时任务?
- 点击表格实现文本输入效果
- 链队
- MAVEN私服
- mysql的update insert 和 replace的区别
- QT快键键
- Python yield 使用浅析
- 51nod 1341 混合序列 (矩阵快速幂)