zoukankan      html  css  js  c++  java
  • hdu5754 Life Winner Bo 各种博弈(多校)

    题意:
    给你一个n∗m的棋盘,然后给你4种棋子,分别是:
    1.王:能横着走,或者竖着走,或者斜着走,每次可以走1格
    2.车:可以横着走或者竖着走,每次可以走无数格
    3.马:走日字形,例如:如果现在在(1,1),可以走到(2,3),即先走一格直线,然后斜着走一格
    4.王后:可以横着走,或者竖着走,或者斜着走,每次可以走无数格
    所有棋子在走的时候只能向右或向下走,不可后退,谁先走到(n,m)点,谁赢.
    分析:
    1.王:从必败点递推,就能发现规律了。
    2.车:nim博弈,横着走n-1步,竖着走m-1步,相当于从两堆n-1和m-1的石子中取石子。
    3.马:这个是画图,找规律,要注意一个玩家发现自己会输并且不是必败点的话他可以选则平局,这题要从(1,1)点往后推必败点和必胜点。具体的推导的话可以参考这篇博客:http://blog.csdn.net/helloiamclh/article/details/52039236
    4.王后:威佐夫博弈

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int T;scanf("%d",&T);
        int t,n,m;
        while(T--){
            scanf("%d%d%d",&t,&n,&m);
            if(t==1){
                if(n%2==0||m%2==0)puts("B");
                else puts("G");
            }
            else if(t==2){
                if((n^m)==0)puts("G");
                else puts("B");
            }
            else if(t==3){
                if(n==m&&n%3==1)puts("G");
                else if(m==n-1&&n%3==0)puts("B");
                else if(n==m-1&&m%3==0)puts("B");
                else puts("D");
            }
            else if(t==4){
                n--;m--;
                int k=abs(n-m);
                int minn=min(n,m);
                int ak=floor(k*(1.0+sqrt(5.0))/2);
                if(ak==minn)puts("G");
                else puts("B");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    pam_cracklib module
    转:ubuntu svn
    fw: subversion+apache config
    转:jenkins 简介
    fw:java 10大必知技术
    FW: Linux 搭建 csvn 服务器。
    转:修改svn 端口号
    转:Ubuntu搭建jenkins
    转:vmware workstation的三种网络连接方式。
    图像处理之直方图均衡
  • 原文地址:https://www.cnblogs.com/01world/p/5762826.html
Copyright © 2011-2022 走看看