Acwing 236. 格鲁吉亚和鲍勃

题意:

一排网格,将网格从左到右依次编号 1,2,3,…,并将 N 个西洋棋棋子放在不同的网格上,如下图所示:

两个人轮流移动棋子
每次玩家选择一个棋子,并将其向左移动,但是不能越过任何其他西洋棋棋子或超过左边界。

玩家可以自由选择棋子移动的步数,其限制是棋子必须至少移动一步,一个网格最多可以包含一个棋子。

无法移动任何棋子的玩家将输掉游戏。
1<=N<=1000
每个棋子的位置不超过10000

题解:

看题目可知,每个棋子的位置不超过10000 ,说明状态可以达到210000,那用sg函数记忆化搜索求无法实现,这么大的范围,说明题目会有更为精妙的解法

如图,红色圈住的为棋子所在位置,我们考虑6和9这两个位置的棋子,如果先手移动6位置的棋子x步,那么后手也可以移动9位置的棋子x步,相当于后手可以复制前者的操作,相当于大家都没操作。但是如果先手移动9,后手就不一定可以复制先手的操作,你可能会问为什么先手移动9,后者为社么不一定能够11呢?我们这里是将两个棋子为一组看待的,6和9为一组,如果先手移动9,后手移动其他组的棋子(比如11),那先手还可以移动那个组剩下的棋子(比如12),这样消除了后手刚刚的操作,因此比赛的关键取决于每组的间隙。如果是奇数个呢?我们就让第一个棋子与左边界为一组,剩下偶数个相邻两两一组。
这样问题就变成了:
假设现在有m组,每组都有空隙大小为a[i],每次操作可以减小任意一组的空隙大小(1~a[i]),两个人轮流操作,如果有一方无法操作,则游戏结束
现在这个游戏像什么?不就是nim游戏吗?再想想是不是,所有我们直接将空隙大小异或就可以得到游戏结果
妙啊这个题的思路

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];if(n&1)a[++n]=0;sort(a+1,a+1+n);int s=0;for(int i=2;i<=n;i+=2){s^=(a[i]-a[i-1]-1);}if(s)cout<<"Georgia will win"<<endl;else puts("Bob will win");} return 0;
}

Acwing 236. 格鲁吉亚和鲍勃(博弈论妙题)相关推荐

  1. [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题

    题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...

  2. 2021EC-final博弈论E题Prof. Pang and Poker

    题目链接:Problem - E - Codeforces 题目意思:有三个人玩游戏,Alice,Bob,还有Prof. Pang.Alice和Bob分别有n,m张扑克,Pang只有一张,出牌顺序是A ...

  3. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块

    AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 文章目录 AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 一.题目 二.解题思路 三.解题思路 本次博客 ...

  4. 博弈论分析题_微观经原笔记(四)一些关于博弈论的习题

    这学期学的经济学原理可以简单地分为三部分. 第一部分是引入市场中讨论的一些概念,例如剩余.弹性.政策.外部性. 第二部分是讨论消费者行为.讨论的内容如约束.效用.决策.禀赋,以及衍生结论. 第三部分是 ...

  5. 博弈论分析题_博弈论练习题答案 张照贵

    二.博弈论与经济学的关系是什么?经济学的变化趋势是什么? 答: ( 1 )博弈论与经济学的关系: 1 .博弈论在经济学中的应用最广泛.最成功. 2 .经济学家对博弈论的贡献越来越大. 3 .经济学和博 ...

  6. AcWing 1月9日每日一题 2058. 笨拙的手指

    AcWing 2058. 笨拙的手指 思路分析: 枚举的思想,因为题目中明确说明只有一位不同,所以可以把所有情况枚举出来,1e9的二进制最多不超过30位,三进制同理,因此分别进行枚举后,求出10进制的 ...

  7. FZU-2230 翻翻棋(博弈论,规律题)

    象棋翻翻棋(暗棋)中双方在4*8的格子中交战,有时候最后会只剩下帅和将.根据暗棋的规则,棋子只能上下左右移动,且相同的级别下,主动移动到地方棋子方将吃掉对方的棋子.将和帅为同一级别.然而胜负在只剩下帅 ...

  8. 【博弈论/思维题】人人尽说江南好

    选自HEOI2014 BZOJ 3609: [Heoi2014]人人尽说江南好 因为游戏规定,首先无法合并的一方判输, 每人都会使用最优策略, 那么贪心的想, 最优合并方案最后石子排布情况一定为m, ...

  9. 博弈论分析题_博弈论复习题及答案

    囚徒困境说明个人的理性选择不一定是集体的理性选择. (√ ) 子博弈精炼纳什均衡不是一个纳什均衡. (× ) 若一个博弈出现了皆大欢喜的结局,说明该博弈是一个合作的正和博弈. ( ) 博弈中知道越多的 ...

最新文章

  1. addEventListener()与removeEventListener()
  2. 一文让你明白Redis持久化
  3. mysql工具使用意义_MySQL性能分析、及调优工具使用详解
  4. python随机生成中文字符串_利用python3随机生成中文字符的实现方法
  5. C++的三种访问权限的继承
  6. php中implode()和explode()的应用
  7. 漫步者蓝牙驱动_2020年知乎最受欢迎的高性价比真无线蓝牙耳机推荐,轻松选择蓝牙耳机(9月最新)!...
  8. linux进程增删改查,iptables的增删改查
  9. PHP 常用设计模式 (转载)
  10. CoreAnimation编程指南(八)事务 转自:http://www.dreamingwish.com/
  11. Git配置安装使用教程操作github上传克隆数据
  12. python如何定义一个空列表1s_如何在Python中创建多个(但单独的)空列表?
  13. SSMS(sql server管理工具)修改表不允许保存
  14. 二冲程发动机均值模型仿真
  15. 王道考研数据结构之------循环单链表
  16. ​Spring Cloud中统一异常处理是怎么做的?
  17. 2016年,上海的互联网企业是否值得加入?
  18. 编译:一个 C 程序的艺术之旅
  19. ios应用数据存储方式(偏好设置)-转
  20. centos7更新pip版本

热门文章

  1. 火了!女教授把自己P成女娲,登上学术期刊封面
  2. 程序员搞笑故事:给女儿织的辫子 ​​​​,你知道是什么算法吗?
  3. 计算机能不能直接识别汇编语言程序,计算机能直接识别执行用汇编语言编写的程序吗...
  4. linux主线程结束 子线程还能运行么,linux主线程和子线程
  5. mysql xa 演示_mysql的XA事务恢复过程详解
  6. Angular运行在java_在本地运行现有Angular项目
  7. background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
  8. 操作数数据类型 char 对于 sum 运算符无效。_数据类型和运算符
  9. java proguard 使用_一步步教你使用Proguard混淆Java源代码
  10. linux提升权限命令提示符,win10如何直接使用命令提示符提高管理员权限?