HDU 4111--Alice and Bob
来源:互联网 发布:mac 怎么下载ps 编辑:程序博客网 时间:2024/05/18 12:01
来源:http://acm.hdu.edu.cn/showproblem.php?pid=4111
题意:有n堆石子,Alice和bob轮流进行游戏,游戏有两种操作:1、从其中一堆拿走一个石子,2、选两堆石子合并。每人每次只能选两种操作中的一种,谁拿到最后一个石子谁赢。
分析:由于总数不变,最终总是要一个个拿完。那么有机会获胜的一方,肯定是先要把所有的合在一起,那么最终就拼奇偶数了。所以双方都要合并。总共就是sigma(ai)+n-1。而且如果没有某堆只有一个的话,对方是阻挡不住的,没有取完,便被合并了。
所以就要考虑某堆只有一个的情况,单独考虑。
其中的操作包括:
把某堆只有一个的,取走
把两堆只有一个的,合并
把某堆只有一个的,合并给不是一个的
把不是一个的,取走一个
采用记忆化搜索
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define N 10005#define LL long long#define inf 1<<29#define eps 1e-7using namespace std;int sg[55][60005];int get_sg(int i,int j){ if(sg[i][j]!=-1) return sg[i][j]; if(j==1) return sg[i][j]=get_sg(i+1,0); sg[i][j]=0; //某堆只有一个的取掉 if(i>=1&&!get_sg(i-1,j)) sg[i][j]=1; //把不是1个的取走一个 else if(j>=1&&!get_sg(i,j-1)) sg[i][j]=1; //把1个的合并给不是1个的 else if(i>=1&&j>0&&!get_sg(i-1,j+1)) sg[i][j]=1; //把两个1个的合并,其中注意,合并是需要一步的 else if(i>=2&&((j==0&&!get_sg(i-2,j+2))||(j&&!get_sg(i-2,j+3)))) sg[i][j]=1; return sg[i][j];}int main(){ int n,t,cas=0,k; scanf("%d",&t); memset(sg,-1,sizeof(sg)); while(t--){ scanf("%d",&n); int one=0,sum=0; while(n--){ scanf("%d",&k); if(k==1) one++; else sum+=(k+1); } if(sum) sum--; printf("Case #%d: ",++cas); if(get_sg(one,sum)) puts("Alice"); else puts("Bob"); } return 0;}
- HDU 4111--Alice and Bob
- hdu-4111-Alice and Bob
- HDU 4111 Alice and Bob
- Alice and Bob HDU
- hdu 4111 Alice and Bob(博弈)
- HDU 4111 Alice and Bob 博弈论
- hdu 4371 Alice and Bob
- HDU 4371 Alice and Bob
- HDU 4371 Alice And Bob
- HDU 4268 - Alice and Bob
- hdu 4268 Alice and Bob
- hdu 4268 Alice and Bob
- hdu - 4268 - Alice and Bob
- HDU 4268 Alice and Bob
- hdu 4268 alice and bob
- hdu 4268 Alice and Bob
- hdu 4268 Alice and Bob
- hdu 4371 Alice and Bob
- Windows Store apps开发[22]Windows 8: WinRT中文件的正确读写方法
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 嵌入式Linux实验笔记(一)
- MINI GUI 上的helloworld 程序
- C# MD5 加密方法
- HDU 4111--Alice and Bob
- VMware(VMDebugger)导致VS2010启动慢的解决办法
- 立方体纹理(cube map)
- cocos2d HelloWorld 项目横竖屏、自动旋转问题
- MINI GUI 加载位图
- C语言---“C语言 谁与争锋?”
- WebBrowser直接写入内容
- MINI GUI绘图
- 全面的framebuffer详解