博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1704 Georgia ans Bob (Staircase-Nim)
阅读量:5936 次
发布时间:2019-06-19

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

把数组倒置(17 14 12 9 7 6 5 1),将相邻棋子的间距视为一堆石子(2 1 2 0 0 3),那么题中所给操作即为把后一堆石子中的n个放到前一堆石子中,这样就转化为了阶梯博弈。用阶梯博弈的解法直接奇位异或就ok了。

在其他博客里还看到一种解法,从后向前两两分组,奇数个点则在最前加一个0结点。把两个结点间的间距看作一堆石子。

1. 若对手移动两个中的前一个,那么后一个一定可以移动同样多的位置

2. 若对手移动两个中的后一个,那么等同于从这堆石子中拿出n个

这不就是阶梯博弈么?对偶数堆的操作可以忽视,奇数堆异或即为解。干嘛说的好像很厉害的样子...

code:

#include<cstdio>
#include<cstdlib>
int data[
1001] ;
int cmp(
const 
void *a, 
const 
void *b){
    
return *(
int *)a < *(
int *)b ? -
1 : 
1 ;
}
int main(){
    
int t, n, i, j, sum ;
    scanf(
"
%d
", &t) ;
    
while(t--){
        sum = 
0 ;
        scanf(
"
%d
", &n) ;
        data[
0] = 
0 ;
        
for(i=
1; i<=n; i++)
            scanf(
"
%d
", &data[i]) ;
        qsort(data, n+
1
sizeof(data[
0]), cmp) ;
        
for(i=n; i>
0; i-=
2)
            sum ^= (data[i] - data[i-
1] - 
1) ;
        
if(sum) printf(
"
Georgia will win\n
") ;
        
else printf(
"
Bob will win\n
") ;
    }
    
return 
0 ;} 

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/05/04/2482187.html

你可能感兴趣的文章
【二】express
查看>>
Mac上基于Github搭建Hexo博客
查看>>
What does corn harvester involve?
查看>>
阿里云服务器ECS开放8080端口
查看>>
前端常用排序详解
查看>>
Spring中实现监听的方法
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>
螺旋队列问题之二
查看>>
扩展运算符和解构赋值的理解
查看>>
后缀数组(suffix array)详解
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
软件工程之构建之法
查看>>