博弈问题,先考虑如果总数n为偶数(k!=1),当n个点全两两挨在一起时,谁先走谁输(自己模拟吧)

当总数n为奇数时(k!=1),先吧第一个点走道终点,然后就是偶数的情况了,然后考虑怎么将他们两两挨在一起(注意不用所有点都挨在一起)

这是就是当n为偶(k!=1)计算a[i+1]与a[i]的距离,for(i+=2),这样我们就将它化成几点nim游戏问题,将a[i+1]与a[i]的距离左为每堆石子的个数

当n为奇数,就是a【1】自己当作一个堆,然后还是将a[i+1]与a[i]的距离左为每堆石子的个数,轮到谁没有石子取了,谁就输啦!当然注意特殊情况就是当n为奇数的时候,k如果为2,前面我们说当n为奇数是直接将第一个直接走到终点,但因为第二哥是k了,所以第一个a[i]不能走道终点,只能走道里终点最近的位置也就是只能走a[i]-1步,所以就是将a[i]-1当作一个堆

再说一下什么是nim游戏

通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。

对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示异或(xor)运算。

为什么可以a1^a2^...^an=0 就判断先取的一定赢呢,首先是如果堆内的石子数量成对相等,这个应该都明白,就是2,2的情况或者4,4,9,9,这样,谁先取谁输,但如果是三组的呢,怎么办,用a1^a2^...^an=0,啊!!简洁的说就是将所有堆数全都分解成二进制堆,譬如9,5,12,谁先取谁输,为什么,就是9的二进制1001分成8和1,5的二进制0101分成4和1,12的二进制1100分成8和4,然后9,5,12就变成1,1,4,4,8,8了这不就是成对了么,就业是为什么a1^a2^...^an=0就可一判断谁先走谁输了

以上都是自己的一些理解,如有错误请指正哈!!!!(*^__^*) 嘻嘻……

代码如下

#include<iostream>
#include<cstdio>
using namespace std;
int a[1005],ans;
int n,k;
void move(){int i;if(n%2==0){for(i=1;i<=n;i+=2){ans^=(a[i+1]-a[i]-1);}}else{ans^=a[1];for(i=2;i<=n;i+=2){ans^=(a[i+1]-a[i]-1);}}}
int main(){while(~scanf("%d%d",&n,&k)){for(int i=1;i<=n;i++)scanf("%d",&a[i]);ans=0;if(k==1) {printf("Alice\n");continue;}if(k==2 && n%2==1){a[1]--;move();}else move();
//        cout<<ans<<endl;if(ans==0) printf("Bob\n");else printf("Alice\n");}}

hdu 4315 Climbing the Hill 博弈问题,可转化为nim游戏问题,多校联合赛(二)第六题相关推荐

  1. HDU多校联合赛(1007 Magical Forest)模拟题

    题目: Problem Description There is a forest can be seen as N * M grid. In this forest, there is some m ...

  2. hdu 1907 Jone 尼姆博弈

    题目:点击打开链接 John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T ...

  3. ACM-尼姆博弈之取(m堆)石子游戏——hdu2176

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. #1163 : 博弈游戏·Nim游戏(数学博弈)

    #1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样 ...

  5. hihoCoder#: 博弈游戏·Nim游戏

    [题目链接]:click here~~ [题目大意]: #1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,A ...

  6. 博弈游戏·Nim游戏·二

    题目1 : 博弈游戏·Nim游戏·二 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 Alice和Bob这一次准备玩一个关于硬币的游戏: N枚硬币排成一列,有的正面 ...

  7. 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理

    博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...

  8. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  9. 蓝桥杯第七届省赛java组大题解析(“取球博弈”??难度,“压缩变换”三星难度)

    第六题 题目: 方格填数 如下的10个格子    +--+--+--+    | 0| 1| 2| +--+--+--+--+ | 3| 4| 5| 6| +--+--+--+--+ | 7| 8| ...

  10. python博弈树_简单博弈树算法(nim游戏)

    简单博弈树算法(nim游戏)的python实现. import random import treelib import sys tagid=0 def genId(): global tagid t ...

最新文章

  1. SQLSERVER DISTINCT的反例
  2. 洛谷1090 合并果子
  3. shell变量/环境变量和set/env/export用法_转
  4. C语言变量定义和赋值
  5. 大连理工18秋计算机应用基础,大连理工大学网络教育本科计算机应用基础入学考试模拟题...
  6. 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式
  7. python 且_Pyface库:一个基于pyqt、pyside、wx且简化的python的GUI
  8. 关于WinCE6.0补丁包的一点说明
  9. 使用SQL Server Management Studio 创建作业备份数据库
  10. php-fpm启动条件,php-fpm的启动、重启
  11. C语言博客作业---嵌套循环
  12. Bug:No mapping for GET /onepill//swagger-ui.html
  13. DBUtil使用步骤
  14. Web前端必备:JavaScript基础知识梳理
  15. linux下为php添加GD库(重新编译php)
  16. 嵌入式设备交叉编译perf性能分析工具
  17. Git的基本使用(用户初始化配置、新建代码库、把文件提交到缓存区、把文件提交到本地仓库等)
  18. 华为一级产品线介绍(部分)
  19. Mac 使用Charles后,退出Charles后,不能浏览网页,提示:未连接到互联网代理服务器出现问题,或者地址有误。
  20. 计算机科学 在职双证,计算机在职研究生有双证吗

热门文章

  1. MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
  2. Python Django之路由系统
  3. iOS调试篇:多线程造成的崩溃
  4. 5个开发人员不应该错过的最好跨平台PHP编辑器
  5. RVA和文件偏移的转换
  6. ArcGIS依据某一字段进行数据分层
  7. [转载]Unity3D 访问Access数据库
  8. 输入两个整数,求他们相除的余数
  9. ExcuteScalar ExecuteNonQuery
  10. MATLAB中if (0)