博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1704_棋盘上的博弈
阅读量:5291 次
发布时间:2019-06-14

本文共 1263 字,大约阅读时间需要 4 分钟。

/**State: 1704    Accepted    200K    16MS    C++    594B*题目大意:*        一个1*M的棋盘上有N个棋子,初始位置一定,两人轮流操作,*        每次移动一枚棋子,要求只能向左移且至少移动一格,而且不*        能到达或经过以前有棋子的格子,谁无法移动棋子就算输。*解题思路:*        先考虑两个棋子靠在一起的时候,这两对棋子就构成了一个*        奇异局势(P点)。所以可以把题目中的棋子分解为两对两对,*        两对两对之间是不需要考虑什么的。在同一对棋子中,如果对*        手移动前一个,你总能对后一个移动相同的步数,所以一对*        棋子的前一个和前一对棋子的后一个之间有多少个空位置对*        最终的结果是没有影响的。每两对构成一组,而这两对之间就*        是一堆石子。然后就可以Nim博弈了。注意如果是奇数个棋子,*        首个棋子要跟棋盘首构成一对。*/
View Code
#include 
#include
#include
using namespace std;const int MAX = 10005;int main(void){ int cas; scanf("%d", &cas); while(cas--) { int ini[MAX]; int n; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &ini[i]); sort(ini, ini + n); int sum = 0; for(int i = n - 1; i >= 0; i -= 2) { int tmp; if(i == 0) tmp = ini[i] - 1; else tmp = ini[i] - ini[i - 1] - 1; sum ^= tmp; } if(!sum) printf("Bob will win\n"); else printf("Georgia will win\n"); } return 0;}

转载于:https://www.cnblogs.com/cchun/archive/2012/07/26/2610154.html

你可能感兴趣的文章
PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)...
查看>>
2017-2018-2 20155309 南皓芯 Exp9 Web安全基础
查看>>
Leetcode Reverse Words in a String
查看>>
一文读懂内网、公网和NAT
查看>>
NotMapped属性特性
查看>>
go 语言 基础 类型(1)
查看>>
idea的初次使用
查看>>
正则表达式
查看>>
golang数据结构之定时器篇
查看>>
IBM内存三技术:Chipkill、MPX、MM
查看>>
css3伪类元素
查看>>
php部分,一个用递归无限分类的方法
查看>>
android,eclipse
查看>>
SpringBoot 上下文获取注入的Bean
查看>>
归并排序的进一步理解
查看>>
C - Wooden Sticks
查看>>
Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题
查看>>
[8.3] Magic Index
查看>>
(转·)WMPLib
查看>>
C语言结构体对齐
查看>>