3298: [USACO 2011Open]cow checkers
3298: [USACO 2011Open]cow checkers
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 65 Solved: 26
[Submit][Status][Discuss]
Description
一天,Besssie准备和FJ挑战奶牛跳棋游戏。这个游戏上在一个M*N(1<=M<=1,000,000;1<=N<=1,000,000)的棋盘上,
这个棋盘上在(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),确定是谁赢。
Input
第1行:两个用空格隔开的整数M和N;
第2行:一个整数T;
第3到第T+2行:两个用空格隔开的整数x和y.
Output
第1到T行:包含“Farmer John”或者是“Bessie”,表示谁赢了这轮游戏。
Sample Input
1
1 1
Sample Output
HINT
Source
题解:实际上,一上来此题目不难想到可以通过DP(或者记忆化搜索也行)来搞,但这样问题来了——N,M<=1000000,显然会爆。。。
于是只好来另辟蹊径——(明确两个概念: 死点:表示当某一方在还未走这一步之前如果落到了这个位置将必死无疑的点 活点:正好相反)
1.题目中说从(N-1,M-1)走到(0,0),既然这样,我们何不看作从(0,0)走到(N-1,M-1)呢?
2.题目中说可以横向走,可以纵向走,可以斜向走,这不就意味着只要某一点被认定为死点,则这一个点横向、纵向、斜向上的其他点都是活点么(很明显如果某人走到了死点横向、斜向、纵向上的其他点上的话,他就可以把对手一步送到死点上,结束战斗。。。)
3.由2可知,所有的死点必然不在同一行,同一列,同一对角线上,也就是说对于某一x或者y坐标而言,其上死点的坐标是唯一的
4.所以综上所述,可以通过简单的O(N)预处理来实现求出每一个x坐标上的死点位置,然后接下来对于每个询问只要O(1)判断是否相同即可
于是,我们来开始找规律:

如上图,黑色的斜线表示对称轴,蓝箭头连着的是对称的,而红色箭头均为与对称轴平行的线,很明显所有下半边的点所在的线间隔都是1单位,这样一来规律就很分明了——对于当前的x坐标,要么已经通过之前的某点对称得到了结果,如果没得到的话,那就根据上一个同侧的点从斜线方向挪一格,然后对称一下得出上半边那个点,实现快速求解
/**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ var
i,j,k,l,m,n:longint;
a:array[..] of longint;
function max(x,y:longint):longint;
begin if x>y then max:=x else max:=y; end;
begin
fillchar(a,sizeof(a),-);
a[]:=;l:=; readln(n,m);
for i:= to max(m,n) do
begin if a[i]>- then continue;
inc(l);a[i]:=i+l;if (i+l)<= then a[i+l]:=i; end;
readln(n);
for i:= to n do
begin
readln(j,k);
if k>j then begin l:=k;k:=j;j:=l end;
if a[j]<>k then writeln('Bessie') else writeln('Farmer John');
end;
end.
3298: [USACO 2011Open]cow checkers的更多相关文章
- bzoj 3298: [USACO 2011Open]cow checkers -- 数学
3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec Memory Limit: 128 MB Description 一天,Besssie准备 ...
- BZOJ3298: [USACO 2011Open]cow checkers(佐威夫博弈)
3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 195 Solved: 96[S ...
- 【bzoj3298】[USACO 2011Open]cow checkers(博弈论)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3298 博弈论经典结论题,我也没什么好说的.matrix67大佬比我想得深入的多:捡石子 ...
- BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈
题目描述 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1). ...
- BZOJ3298: [USACO 2011Open]cow checkers 威佐夫博弈
Description 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1 ...
- [USACO11OPEN]奶牛跳棋Cow Checkers(博弈论)
题目描述 One day, Bessie decides to challenge Farmer John to a game of 'Cow Checkers'. The game is playe ...
- LUOGU P3024 [USACO11OPEN]奶牛跳棋Cow Checkers
题目描述 One day, Bessie decides to challenge Farmer John to a game of ‘Cow Checkers’. The game is playe ...
- [USACO 07NOV]Cow Relays
Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a rel ...
- 【USACO】Cow Brainiacs
题意描述 Cow Brainiacs 求 \(n!\) 在 \(b\) 进制表示下的第一位非 \(0\) 位的数字. 算法分析 闲话 忙人自动略过 之前做过一道 \(10\) 进制表示下的题目,感觉差 ...
随机推荐
- Windows 7 下 PHP 开发环境搭建(手动)
Windows 7 下 PHP 开发环境搭建 1.说明 做开发的都知道一句话,就是“站在巨人的肩膀上”.确实现在打开浏览器随便一搜很多一键安装PHP环境的软件,比如wamp.xampp.AppServ ...
- swift 导航的使用
导航还是有必要来搞一下的!!!!! 这只是一些基本的导航的使用.....感兴趣的猿可以自己去 废话不多 源码奉上 ⬇️ 首先 delegate里面 在 func application(ap ...
- Eclipse指定JDK版本 Failed to load the JNI shared JVM.dll
Eclipse指定JDK版本 Failed to load the JNI shared JVM.dll 打开eclipse.ini添加 -vm C:/Java/jdk1.6.0_02/bin 参考: ...
- Weex系列一、构建Weex工程
Weex比React Native更简单,更容易学习,并且做到真正的跨平台,一套代码可以多个平台运行.所以建议大家都用Weex吧. 一.安装Node 已经安装Node的,请忽略过去. 检查Node是否 ...
- [JQuery]Jquery对象和dom对象
jquery对象是jquery包装dom对象后产生的对象,它们都只能使用各自的方法. 1.定义变量时,通过$来区分: var $variable = jquery对象: var variable = ...
- IOS学习之block代码块
前言: block这个名词对于做一般开发者来说可能会觉得稀奇古怪而非常陌生,但是对于iOS工程师来说,在整个开发中到处都是它的影子,今天一大早觉得在假期学习一下它,对明年的iOS开发工作做个准备,突然 ...
- C#实现HttpUtility.UrlEncode输出大写字母
在c#中,HttpUtility.UrlEncode("www+mzwu+com")编码结果为www%2bmzwu%2bcom,在和Java开发的平台做对接的时候,对方用用url编 ...
- (译)AngularJS1.3.0 开发者指南(四) -- 控制器
理解Controllers 在AngularJS中, Controller是一个Javascript构造函数, 常常被用来扩展 Angular Scope 对象. 控制器通过 ng-controlle ...
- java反射的理解与应用(某大神博客中看到的博文,写的真的太好了,果断转载作为笔记)
原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html#undefined 一.什么是反射机制 简单的来说,反射机制指的是程序 ...
- Java字符串之String与StringBuilder
String与SringBuiler的一些比较 在Java中,我们会大量使用字符串,但是String究竟是怎样工作的我们可能没有想过太多,其实在String类中,每一个看起来会修改String值的 ...