zoukankan      html  css  js  c++  java
  • HDU 2147 找规律博弈

    题目大意:

    从右上角出发一直到左下角,每次左移,下移或者左下移,到达左下角的人获胜

    到达左下角为必胜态,那么到达它的所有点都为必败态,每个点的局势都跟左,下,左下三个点有关

    开始写了一个把所有情况都计算的打表

    for(int i=n ; i>=1 ; i--){
                for
    (int j=1 ; j<=m ; j++){
                    bool
    flag1 = p[i][j-1];
                    bool
    flag2 = p[i+1][j];
                    bool
    flag3 = p[i+1][j-1];
                    if
    (flag1 || flag2 || flag3) p[i][j] = false;
                    else
    p[i][j] = true;
                }
            }

    但貌似因为样例太多就超时了

    根据自己所打的表画个表格标注当前格子的状态就很容易找到规律

    任意两个必胜态的行差和列差都是2的倍数

     1 #include <cstdio>
     2 #include <cstring>
     3 using namespace std;
     4 #define N 2005
     5 bool p[N][N];
     6 
     7 int main()
     8 {
     9    // freopen("a.in" , "r" , stdin);
    10     int n,m;
    11     while(scanf("%d%d" , &n , &m) , n||m)
    12     {
    13         if((m-1)&1 || (n-1)&1) puts("Wonderful!");
    14         else puts("What a pity!");
    15     }
    16     return 0;
    17 }
  • 相关阅读:
    python 四舍五入
    Elasticsearch 入门
    Mac下ElasticSearch安装、Kibana
    Mysql 终端中文显示乱码
    Zookeeper 在 Kafka 中的作用
    mac 安装Kafka
    Creating a NuGet Package in 7 easy steps
    Updating and Publishing a NuGet Package
    ASP.NET Core 发布
    An entry point cannot be marked with the 'async' modifier
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/4251621.html
Copyright © 2011-2022 走看看