Description

一天,Besssie准备和FJ挑战奶牛跳棋游戏。这个游戏上在一个M*N的棋盘上,
这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1)。
Bessie每次都是第一个移动棋子,然后Bessie与Fj轮流移动。每一轮可以做以下三种中的一种操作:
1)在同一行,将棋子从当前位置向左移动任意格;
2)在同一列,将棋子从当前位置向下移动任意格;
3)将棋子从当前位置向下移动k格再向左移动k格(k为正整数,且要满足移动后的棋子仍然在棋盘上)
第一个不能在棋盘上移动的人比赛算输(因为棋子处在(0,0)点)。
共有T个回合(1<=T<=1,000),每次给出一个新起始点的坐标(x,y),确定是谁赢。
1<=M<=1,000,000;1<=N<=1,000,000

Input

第1行:两个用空格隔开的整数M和N;  
第2行:一个整数T;  
第3到第T+2行:两个用空格隔开的整数x和y. 

Output

第1到T行:包含“Farmer John”或者是“Bessie”,表示谁赢了这轮游戏。


Sample Input

3 3 

1 1

Sample Output

Bessie

Solution

威佐夫博弈板子(套公式$\frac{\sqrt{5}+1}{2}$)

把横坐标抽象成一堆石头,纵坐标抽象成一堆石头就行了

然后如果不知道威佐夫博弈这玩意的话其实可以用必胜态必败态来推一下

可以画个图什么的,把前几个必败态找出来,然后会发现对于每一列,必败态仅有一点,然后这些点都沿着对角线对称

所以就递推一下必败态就可以了

威佐夫博弈做法

#include <bits/stdc++.h>

using namespace std ;

int n , m , t ;

int main() {
int a , b ;
scanf( "%d%d%d" , &a , &b , &t ) ;
double y = ( sqrt( ) + ) / ;
while( t -- ) {
scanf( "%d%d" , &n , &m ) ;
if( m < n ) swap( m , n ) ;
int x = ( m - n ) * y ;
if( x == n ) puts( "Farmer John" ) ;
else puts( "Bessie" ) ;
}
}

递推做法

#include <bits/stdc++.h>

using namespace std ;

const int N = 1e6 +  ;

int ans[ N ] ;

int main() {
ans[ ] = ;
int tmp = ;
for( int i = ; i < N ; i ++ ) {
if( ans[ i ] ) continue ;
ans[ i ] = ans[ tmp ] + i - tmp + ;
tmp = i ;
if( ans[ i ] < N - ) ans[ ans[ i ] ] = i ;
}
int n , m , t ;
scanf( "%d%d%d" , &n , &m , &t ) ;
while( t -- ) {
int a , b ;
scanf( "%d%d" , &a , &b ) ;
a ++ ; b ++ ;
if( ans[ a ] == b || ans[ b ] == a ) puts( "Farmer John" ) ;
else puts( "Bessie" ) ;
}
}

BZOJ3298: [USACO 2011Open]cow checkers 威佐夫博弈的更多相关文章

  1. BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈

    题目描述 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1). ...

  2. BZOJ3298: [USACO 2011Open]cow checkers(佐威夫博弈)

    3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 195  Solved: 96[S ...

  3. 3298: [USACO 2011Open]cow checkers

    3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 65  Solved: 26[Su ...

  4. bzoj 3298: [USACO 2011Open]cow checkers -- 数学

    3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec  Memory Limit: 128 MB Description 一天,Besssie准备 ...

  5. 【bzoj3298】[USACO 2011Open]cow checkers(博弈论)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3298 博弈论经典结论题,我也没什么好说的.matrix67大佬比我想得深入的多:捡石子 ...

  6. 【hdu5973】高精度威佐夫博弈

    题意:输入a, b表示两堆石头数目,威佐夫博弈,问:先手胜负? a, b <= 1e100. 高精度.当a > b时, a = (a-b)*黄金分割比 时是先手败状态.因为a, b < ...

  7. nim3取石子游戏 (威佐夫博弈)

    http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有 ...

  8. HDU 5973 Game of Taking Stones 威佐夫博弈+大数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5973 Game of Taking Stones Time Limit: 2000/1000 MS ...

  9. HD 2177(威佐夫博弈 入门)

    取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. php表单身份验证

    1. index.php <form method="post" action="dbtest.php">            姓名:       ...

  2. dedecms网站迁移时记得将安装目录放空 附迁移的正确方法

    这段时间在赶一些新项目,我们建站一般都在本地服务器搭建起来,测试得差不多了才传到网上,这样对蜘蛛也相对友好一些,要不然改来改去变化太大给搜索引擎的第一印象很不好.但是由于本地环境和服务器环境还是有一些 ...

  3. zookeeper java调用及权限控制

    import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayLis ...

  4. 【2014腾讯实习招聘-面试-移动client开发】

    版权声明:本文为博主原创文章,欢迎转载,转载请注明出处. https://blog.csdn.net/kana007/article/details/24375423         个人学习整理.如 ...

  5. springmvc返回json数据的工具类

    在ssm框架下,MVC向前端返回数据的json工具类代码如下: public class JsonResult<T> { public static final int SUCCESS=0 ...

  6. rsync 常用命令

    rsync -auvrtzopgP --progress --delete --exclude-from=exclude.list SRC DST \\保留原文件属性并详细输出 删除那些DST中SRC ...

  7. XenServer:使用XenCenter开设VPS(多图完整版)

    打铁要趁热,咱们接着来玩XenServer.昨天赵容用机房提供的KVM给服务器装了XenServer,今天我们来玩更有意思的:开小鸡.装好XenServer之后,访问我们的服务器IP,就可以看到Xen ...

  8. VMware Coding Challenge: Removing Duplicates Entries

    static LinkedListNode removeDuplicates(LinkedListNode list) { LinkedListNode cur = list; HashSet< ...

  9. 人生苦短之我用Python篇(socket编程)

    socket模块 实现简单的远程连接: 客户端: import socket client = socket.socket()#声明socket类型,同时生成socke连接t对象 client.con ...

  10. IN的另类写法

    EXPLAIN SELECT * FROM `tcb_capital_log` WHERE id IN(66,79,47) EXPLAIN SELECT * FROM ( SELECT 66 AS i ...