题目描述

One day, Bessie decides to challenge Farmer John to a game of 'Cow Checkers'. The game is played on an M*N (1 <= M <= 1,000,000; 1 <= N <= 1,000,000) checkerboard that initially contains a single checker piece on the checkboard square coordinates (X, Y) (0 <= X < M; 0 <= Y < N). The bottom leftmost square of the checkerboard has

coordinates (0, 0), and the top rightmost square has coordinates (M-1, N-1). Bessie always moves first, and then the two players alternate turns. Each turn comprises one of three types of moves:

1) Move the checker piece to any square on the same row to the left of its current position.

2) Move the checker piece to any square on the same column below its current position.

3) Move the checker piece to any spot k squares below and k squares to the left of the current square (where k is any positive integer such that this new spot is still on the checkerboard).

The first player unable to make a move (i.e., because the checker is at (0, 0)) loses. Given that Bessie always goes first, determine who will win the game if both play optimally.

Play and report the winner for T games (1 <= T <= 1,000) reading in a new X,Y starting value for each new game.

有一天,Bessie准备玩一个叫做奶牛跳棋的游戏,来挑战Farmer John。

这个游戏的棋盘大小为 M*N (1 <= M <= 1,000,000; 1 <= N <= 1,000,000) 。最初棋盘上只有一个棋子在(x,y),棋盘的左下角坐标是(0,0),右上角的坐标是(M-1,N-1)。

每次游戏Bessie都是第一个开始,之后两个人轮流。

每次下棋的时候都有三种走法:

1.向左走任意步

2.向下走任意步

3.向左走k步然后向下走k步(k可随便取值,只要不走出棋盘)

先走到(0,0)的人就算输。

游戏共有T次,每次都会给出一个新的坐标(x,y),请输出每一轮赢家的名字。

输入输出格式

输入格式:

* Line 1: Two space-separated integers: M and N

* Line 2: A single integer: T

* Lines 3..T+2: Two space-separated integers: X and Y

第一行:M N

第二行:T

第三行到第T+2行:这一轮的X Y

输出格式:

* Lines 1..T: Should contain either 'Farmer John' or 'Bessie' depending on who wins each game.

共T行,每一行输出那一轮的赢家

思路;

这是一道标准的博弈论(不过好难想啊!!)

横坐标和纵坐标可以抽象为两堆石子

向下走任意步=拿出A堆任意个石子,向左走任意步=拿出B堆任意个石子

向左走和向下走相同的任意步=拿出A堆和B堆个数相等的任意个石子

这就抽象成了一个威佐夫博弈的模型

套用公式算一下是否是奇异局面就行(不知道什么是威佐夫博弈的请出门左转百度,讲的很详细)

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#define rii register int i
using namespace std;
int x,y,n,t,m;
int check(int l,int k)
{
if(l>k)
{
swap(l,k);
}
int wzf=(double)((k-l)*(sqrt()+)/);
if(wzf==l)
{
return ;
}
else
{
return ;
}
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%d",&t);
for(rii=;i<=t;i++)
{
scanf("%d%d",&x,&y);
int pd=check(x,y);
if(pd==)
{
cout<<"Bessie"<<endl;
}
else
{
cout<<"Farmer John"<<endl;
}
}
}

[USACO11OPEN]奶牛跳棋Cow Checkers(博弈论)的更多相关文章

  1. LUOGU P3024 [USACO11OPEN]奶牛跳棋Cow Checkers

    题目描述 One day, Bessie decides to challenge Farmer John to a game of ‘Cow Checkers’. The game is playe ...

  2. 3298: [USACO 2011Open]cow checkers

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

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

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

  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——威佐夫博弈

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

  6. 洛谷P1472 奶牛家谱 Cow Pedigrees

    P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...

  7. BZOJ3298: [USACO 2011Open]cow checkers 威佐夫博弈

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

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

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

  9. 【dp】奶牛家谱 Cow Pedigrees

    令人窒息的奶牛题 题目描述 农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < ...

随机推荐

  1. 解决flashfxp连接虚拟机报错 530 permission denied

    菜鸟使用flashfxp遇到连接报错. [21:36:19] [R] 530 Permission denied.[21:36:19] [R] 连接失败 (连接已被客户端关闭) 搜索后发现,是因为li ...

  2. 不同线程不能获取其他线程设置的ThreadLocal里面的值

    背景: 最近在项目用到了ThreadLocal,存放一些值.起线程异步获取ThreadLocal中的值,得到null.这是由于,ThreadLocal.get()会获取当前线程的一个map对象,以Th ...

  3. IO流之序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 l ...

  4. JS多级树结构写法

    效果: 一.布局: <div class="three_tree"> <div class="tree_title_cut"> < ...

  5. JavaScript入门几个概念

    JavaScript入门几个概念 刚刚入门JavaScript的时候,搞懂DOM.BOM以及它们的对象document和window很有必要. DOM是为了操作文档出现的API,document是它的 ...

  6. iOS开发之Objective-c的AES128加密和解密算法的实现

    #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> #import <Comm ...

  7. .NET开源工作流RoadFlow-表单设计-文本域

    点击工具栏上的 文本域 按钮可弹出文本域属性设置: 绑定字段:与数据表的某个字段绑定. 默认值:文本域初始值. 最大字符数:文本域可输入的最大字符数. 宽度:文本域的宽度,如:200px,80%. 高 ...

  8. LotusScript_文档查询循环方法整理

    1.  视图(View)查询 ... Set view = db.GetView("ViewName") Set doc = view.GetFirstDocument While ...

  9. 内存分配malloc函数注意事项。

    malloc的全称是memory allocation,中文叫动态内存分配,用于向系统申请分配指定字节的内存空间 原型:extern void *malloc(unsigned int num_byt ...

  10. DispatchAction和ForwardAction

    添加功能的步骤:做页面——编写DAO类中的方法——编写和配置action. 如果多个action 使用一个formbean,这种事儿多发生在统一模块中,就可以用一个Action集中处理多个操作,而不要 ...