zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    js 运动框架
    js 去掉字符中两边的空格
    js 去掉字符中所有空格
    vue移动端webview视频轻应用
    vue绑定v-modal布尔值到checkbox后异步,部分手机更新不及时问题
    使用原生js的scrollTop,刷新进入页面定位到某一个dom元素
    会议管理项目总结
    ionic1上拉刷新,下拉加载,安卓问题解决
    jquery $(document).ready() 与window.onload的区别
    vue2+express4图片上传
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9676859.html
Copyright © 2011-2022 走看看