Georgia and Bob poj-1704

题目大意题目链接

注释:略。


想法:我们从最后一个球开始,每两个凑成一对。如果有奇数个球,那就让第一个球和开始位置作为一对。

那么如果对手移动的是一对球的后一个,我们就移动下一对球的前一个。

因为两个球挨着,所以对手动多少,我们动多少。

如果对手动的是一对球的前一个,我们考虑:

  将对与对之间的格子当成一堆石子,那么对手移动一对球的前一个,就相当于在这堆石子中取走石子。

  那么我们就对应的在另一堆中取石子。

这就相当于一个Nim游戏。如果对手不取石子(移动一对球的后一个),我们也不取石子,并且保证石子数不变(移动下一对球的前一个)。

如果对手取石子,我们就跟他取石子,玩Nim游戏。

通过游戏的和中的SG定理,而且Nim游戏中SG(x)=x。所以只需判断每对球之间的距离的异或和是否等于0即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
using namespace std;
int cases,a[N],b[N],n;
int main()
{
scanf("%d",&cases);
while(cases--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1); int ans=0;
for(int i=n;i;i-=2)
{
int tmp;
if(i==1) tmp=a[i]-1;
else tmp=a[i]-a[i-1]-1;
ans^=tmp;
}
if(ans) puts("Georgia will win");
else puts("Bob will win");
} return 0;
}

小结:三大经典博弈真心牛逼。

最新文章

  1. 自定义 bundle 包的创建
  2. 前端之DIV+CSS布局
  3. 一些Python的惯用法和小技巧:Pythonic
  4. python文件头的#-*- coding: utf-8 -*- 的作用
  5. 单节点nginx为两台apache服务器提供负载均衡
  6. Codeforces Round #228 (Div. 1) A
  7. EasyUI文档学习心得
  8. 统一事件源epoll代码示例
  9. struts2与cookie实现自动登录和验证码验证
  10. OGNL 对象视图导航语言
  11. UVa11613 Acme Corporation(最小费用流)
  12. 自我理解foreach工作原理
  13. 使用gdb调试(转: http://www.cnblogs.com/luchen927/archive/2012/02/07/2339003.html)
  14. Qt HTTP请求同步调用
  15. Git Github jekyll,gem Liquid模板语言 Markdown
  16. Ajax+Struts2实现验证码验证功能
  17. [openresty]安装nginx_lua
  18. JS 面向对象 ~ 创建对象的 9 种方式
  19. react 粗略使用
  20. python性能分析之line_profiler模块

热门文章

  1. 51nod 1166 大数开平方
  2. 百度地图API显示多个标注点带提示的代码 / 单个标注点带提示代码
  3. Quartz.Net学习笔记(1)-完整的例子
  4. dedecms手机网站内页上一篇/下一篇的翻页功能
  5. ERwin 正向工程
  6. 【转载】文件上传命令rz和下载命令sz的安装
  7. vuecli开发项目,文件打包后,appjs/vendorjs文件过大
  8. 【2018百度之星初赛(A)】1002 度度熊学队列
  9. 洛谷——P2734 游戏 A Game
  10. Luogu P4014 「 网络流 24 题 」分配问题