sdut 3893 Return of the Nim(matrix nim)
来源:互联网 发布:python遍历一个字符串 编辑:程序博客网 时间:2024/05/29 08:32
题意:
n堆石子,n为质数,(2<=n<=30)a,b两人轮流取石子,有两种取法,一种是从每堆石子中去k个石子,第二种是从每堆石子中去k个石子,k必需小于n堆中最小的个数。
解题思路:
这是个1*n的matrix nim,貌似只能解n为奇数的情况和n=2的情况,n=2的时候就是威瑟夫博弈。
n不是2的情况的时候,考虑这个题如果没有第二种操作,就是nim博弈,我们可以考虑去每堆石子去k个石子是否会影响当前的np状态。对于n状态,我们不需要用第二种操作,用第一种操作就肯定可以找到一个继承状态是必败的,即异或为0.而对于一个p状态,即当前异或和为0的状态,我们考虑k转换为二进制后最小的那位1在x位,每堆减去一个k,那么每堆数x位的值都肯定取反了,由于有奇数堆,所以这一位上的异或和肯定发生了改变,也就是说这一位肯定由0变成了1,所以即使考虑了第二种操作p状态的所有后继状态仍然是非零的,所以这种情况仍然符合nim博弈。
代码:
#include <bits/stdc++.h>using namespace std;int main(){ int t; cin>>t; while(t--) { int n; scanf("%d", &n); if(n==2) { int x, y; scanf("%d%d", &x, &y); if(x<y)swap(x,y); if(y==int((x-y)*1.0*(1+sqrt(5.0))/2) ) { printf("Watson\n"); } else { printf("Sherlock\n"); } continue; } int i, j, nim=0; for(i=0; i<n; i++) { scanf("%d", &j); nim^=j; } if(nim)printf("Sherlock\n"); else printf("Watson\n"); }}
0 0
- sdut 3893 Return of the Nim(matrix nim)
- SDUT 3893 (山东省第八届ACM省赛A题) Return of the Nim 博弈nim+威佐夫
- Return of the Nim
- Return of the Nim
- Nim博弈和威佐夫博弈 Return of the Nim
- 省SD2017 A Return of the Nim【威佐夫博弈+NIM】
- 山东省第八届省赛 Return of the Nim(博弈)
- Return of the Nim 山东省赛
- 山东省第八届省赛A题 Return of the Nim
- 山东省第八届ACM省赛A.Return of the Nim
- 山东省第八届acm省赛 Return of the Nim
- Return of the Nim----Nim博弈+威佐夫博弈 山东省第八届省赛A题
- 2017 省赛 山东 A Return of the Nim 【博弈】【Nim+Wythoff】
- Return of the Nim----博弈(2017山东ACM-ICPC省赛)
- 端午个人赛-A return of Nim (Nim+威左夫,拓:巴什)
- Matrix Game (Nim博弈)
- ACM 第八届山东省赛 A题 Return of the Nim
- 2017第八届浪潮杯山东省赛 A.Return of the Nim 博弈
- 神经网络梯度消失的解释
- 关于Number.toFixed()的总结
- python学习(2)python基础、字符串和编码
- 将自己的python程序打包成exe(秀同学一脸呐)
- 斯坦福大学第七讲-最优间隔分类器
- sdut 3893 Return of the Nim(matrix nim)
- Android常见的几种移动支付
- java 服务器接口快速开发之servlet详细教程
- 【数据结构实验四】数组
- 关于重定向RedirectAttributes的用法
- mongodb 模糊查询
- 自用fake库,生成身份证,手机号,中文姓名,ip地址和邮箱地址等
- 面试笔试(一):平衡二叉树,Java正则验证,List查找时间复杂度,ORM框架的选择
- jQuery选择器优化问题,使用$('#a .b')等,IDE会提示这是低效的用法的解决