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


    3298: [USACO 2011Open]cow checkers

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 195  Solved: 96
    [Submit][Status][Discuss]

    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 1

    Sample Output

    Bessie

    HINT

    Source

    思路:开始看到通过的人少,没想到就是一个裸的博弈。

    开始我是这样想的,对于每一行,每一列,都至多有一个必败态。我们可以先打表求出早规律。

    先有(0,0)为必败态,然后标记这一行,这一列,以及这个对角线。 然后输出的就是 (0,0) (2,1)( 5,3) (7,4)....

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000010;
    int lose[maxn],x[maxn],y[maxn],d[maxn];
    void solve(int N)
    {
        y[0]=1; d[0]=1;
        for(int i=1;i<=N;i++){
            for(int j=1;j<i;j++){
                if(!y[j]&&!d[i-j]&&!x[j]){
                    cout<<i<<" "<<j<<endl;
                    x[i]=1; y[j]=1; d[i-j]=1; break;
                }
            }
        }
    }
    int main()
    {
        int T,N,M,x,y;
        solve(100);
        return 0;
    }
    View Code

    这不就是两堆石子,可以取任一堆任意个,或者两堆取一样多的模型吗。。。。失了智了。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int T,N,M,x,y;
        scanf("%d%d%d",&N,&M,&T);
        while(T--){
            scanf("%d%d",&x,&y);
            if(x>y) swap(x,y); int z=y-x;
            if((int)((double)1.0*z*((double)1.0*(sqrt(5.0)+1)/2))==x) puts("Farmer John");
            else puts("Bessie");
        }
        return 0;
    }
  • 相关阅读:
    第三章节 BJROBOT 角速度校正 【ROS全开源阿克曼转向智能网联无人驾驶车】
    第二章节 BJROBOT IMU 自动校正 【ROS全开源阿克曼转向智能网联无人驾驶车】
    【扩展】链式编程初识
    【扩展】随机数
    一、.Net基础【1.5】封装MessageBox
    一、.Net基础【1.4】不引入第三变量,交换两个变量的值
    一、.Net基础【1.3】AndAlso & OrElse Operators in C#短路运算符
    一、.Net基础【1.2】变量和数据类型
    一、.Net基础【1.0】入门
    ArcGIS Desktop 10.X 复习与提高【1.1】ArcGIS数据格式的介绍 Esri
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10048920.html
Copyright © 2020-2023  润新知