• LUOGU P3024 [USACO11OPEN]奶牛跳棋Cow Checkers


    题目描述

    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行,每一行输出那一轮的赢家

    输入输出样例
    输入样例#1:

    3 3
    1
    1 1

    输出样例#1:

    Bessie

    说明

    Farmer John and Bessie are playing one game on a 3*3 checkerboard with the checker piece initially at (1, 1) (i.e. at the center of the board).

    Bessie initially can only move the checker piece to either (1, 0) or (0, 1), or (0, 0). Bessie can immediately win by moving the piece to (0, 0).

    起点在(1,1),一开始有三种选择(1,0),(0,1),(0,0)只要Bessie在开始时将棋子移到(1,0)或(0,1),就必胜无疑。

    感谢@ 2014nhc 提供的翻译

    解题思路

    威佐夫博弈裸题。。。两堆石子,一堆n个,一堆m个

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    
    using namespace std;
    
    int n,m,T;
    
    int main(){
        scanf("%d%d%d",&n,&m,&T);
        while(T--){
            int x,y;
            scanf("%d%d",&x,&y);
            if(x>y) swap(x,y);
            int tmp=floor((y-x)*(sqrt(5)+1)/2);
            if(tmp==x) cout<<"Farmer John"<<endl;
            else cout<<"Bessie"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    在CMD中使用for命令对单行字符串做分割的方法
    关于CMD/DOS中的短文件名规则
    [批处理]全盘搜索批量文件
    [批处理]批量提取MKV资源
    关于CMD中延迟环境变量嵌套的实现方法
    [批处理]自动按日期重命名文件名
    [批处理]手动伪造相机自动编号
    [批处理]简易命令行RAR
    [批处理]Oracle启动助手
    [批处理]强制删除文件及文件夹
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9676859.html
Copyright © 2020-2023  润新知