zoukankan      html  css  js  c++  java
  • COWCHECKS

    Cow cowchecks

    (cowcheck.pas/c/cpp)
    【 问题描述】
    一天, Bessie 决定向 FarmerJohn 挑战一个游戏“奶牛西洋棋”。 游戏在一个 M*N 的棋
    盘上进行, 最初棋盘上只有一个棋子, 所在方格的坐标记为(X,Y)。 左下角方格坐标为(0,0),
    右上角方格坐标为(M-1,N-1)。 两个游戏者轮流走棋, Bessie 总是先走。 每步可以选择以下三
    种走法之一:
    1)将棋子移到它现在所在位置同行左边的任意一个格子中。
    2)将棋子移到它现在所在位置同列下方的任意一个格子中。
    3)将棋子移到任意一个位于它现在所在位置下方 k 行, 左边 k 列的格子中( k 为正整数,
    且新位置必须在棋盘内)。
    第一个不能再走棋( 也就是棋子到达了(0,0)) 的游戏者为输家)。 规定 Bessie 先走, 双
    方均作出最佳决策, 找出最后的赢家是谁。( 解释: 轮到该玩家走时, 棋子已经在( 0,0) 点,
    那么他是输家)
    每局开始将给定一对新的 X,Y, 请你模拟 T 局游戏并求出每局的赢家。
    【 输入格式】
    第 1 行: 两个空格隔开的整数: M 和 N;
    第 2 行: 一个整数: T;
    第 3..T+2 行: 两个空格隔开的整数: X 和 Y;
    【 输出格式】
    第 1..T 行: 应包含”Farmer John”或”Bessie”中的一个, 即每局的赢家。
    【 输入样例】
    3 3
    1 1
    1
    【 输出样例】
    Bessie
    【 样例说明】FJ 和 Bessie 在一个 3*3 的棋盘上下一局棋,棋子最初在(1,1( ) 也就是棋盘中央)。
    【样例注释】 Bessie 最初只能将棋子移到(1,0)或(0,1)或(0,0)中的一个格子。 Bessie 可以立即
    将棋子移到(0,0)从而赢下此局。
    【 数据规模】
    对于 20%的数据: 1≤T≤200; 1≤M≤100; 1≤N≤100;
    对于 30%的数据: 1≤T≤500; 1≤M≤1,000; 1≤N≤1,000;
    对于 60%的数据: 1≤T≤1,000; 1≤M≤10,000; 1≤N≤10,000;
    对于 100%的数据: 1≤T≤1,000,000; 1≤M≤1,000,000; 1≤N≤1,000,000;


    此题是一道非常有趣的数学题。这里写图片描述

    图中的红块是Bessie的必输点,而剩下的是他的必赢点。(可以推出来)
    画图可知,Bessie的必输点有(1,2);(2,1);(3,5);(4,7);(5,3)等,而(1,2)(2,1)刚好是反过来的。
    从而我们可以推出一个式子:

    f[i]=i+x; f[f[i]]=i; x++;

    这样,这道题就很简单了。

  • 相关阅读:
    连接查询
    使用聚合函数查询
    mysql 查询数据
    Mysql的基本操作
    MySQL的数据类型
    Mysql简介及安装教程
    客户端-服务端
    configparser模块
    反射
    class_method和static_method
  • 原文地址:https://www.cnblogs.com/stevensonson/p/7612212.html
Copyright © 2011-2022 走看看