POJ 1704 Georgia and Bob题解
来源:互联网 发布:南京网络教育本科 编辑:程序博客网 时间:2024/04/28 22:05
【题目大意】:
一个很长的格子列上有N 个棋子,开始位置一定,两人轮流操作(Georgia先手),每次移动一枚棋子,要求只能向左移且至少移动一格,而且不能越过任何棋子,最后谁无法移动棋子谁就输。
【分析】:
我们考虑从后往前将棋子两两配对(若N为奇数则想象有一个棋子放在第0号位置,将第一个棋子与其配对即可)。这样我们考虑:游戏的最终目的是将任意两棋间间距变为0。若先手移动了某对棋子中的前一个,那么后手也可以移动该对棋子中的后一个相同步数(由于先手可移动,那么根据规则,后者也可移动相同步数),这样一来,两对棋子的间距就不成问题了,即不影响棋局(因为可等价于先手将某对棋子的第一个移到前一对棋子的第二个的后面,而后手则可将该对棋子的后一个移动相同步数而不影响胜负,这样一来,棋子间距就只剩下每对棋子中的间距了),因而每对棋子中的间距相当于Nim游戏中的石子个数,那么原题的SG函数就是每对棋子间距的亦或和了。
【代码】:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define MAX 1001int DATA,N,a[MAX];int main(){ scanf("%d",&DATA); for(int data=1;data<=DATA;data++) { scanf("%d",&N); for(int i=1;i<=N;i++) scanf("%d",&a[i]); sort(a+1,a+1+N); int ans=0; a[0]=0; for(int i=N;i>=1;i-=2) ans^=(a[i]-a[i-1]-1); if(ans) printf("Georgia will win\n"); else printf("Bob will win\n");}return 0;}
0 0
- POJ 1704 Georgia and Bob题解
- POJ 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- POJ-1704-Georgia and Bob
- POJ - 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- POJ 1704:Georgia and Bob
- 【poj 1704】Georgia and Bob
- poj 1704 Georgia and Bob
- POJ 1704 Georgia and Bob
- Georgia and Bob POJ 1704
- Georgia and Bob POJ
- poj 1704 Georgia and Bob(博弈)
- POJ 1704(Georgia and Bob-Nim博弈)
- poj 1704 Georgia and Bob 博弈
- mysql存储过程详解
- 利用端口转发访问VirtualBox虚拟机中的MySQL
- Hybrid APP架构设计思路
- (转)STDAPI释义
- java Integer和int之间==的比较问题 equal
- POJ 1704 Georgia and Bob题解
- 欢迎使用CSDN-markdown编辑器
- iOS 使用可变参数va_list, 定义一个方法
- Objective-C 中nil Nil NULL NSNull 之间的区别
- nodejs的http请求是报错 socket hang up
- “判断listview的最后一项是否完全显示”的其逻辑推理和用到的API讲解,及普遍的错误使用
- 【小松教你手游开发】【unity实用技能】unity安卓游戏优化ETC压缩及Alpha通道处理
- Java工程师成神之路~
- c语言实现二分查找算法