zoukankan      html  css  js  c++  java
  • hdu 2147 博弈

      这个题目好玩,知道推算方法了以后,刚做完之前那个题,然后我就果断打表!MLE!然后我就输出了20*20的情况找找规律吧,我发现当n,m中只要有一个为偶数的时候先手就会赢。下面附上2段代码。

    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1    //这个是打表出来的20*20的值。n是行号,m是列号。
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

    打表代码

     1 #include <stdio.h>
     2 bool gird[2000+10][2000+10];//1代表必胜点 0代表必败点
     3 int main()
     4 {
     5     int i,j;
     6     int n,m;
     7     gird[2000][1]=0;
     8     for(i=2000;i>0;--i)
     9     {
    10         for(j=1;j<=2000;++j)
    11         {
    12             gird[i][j]=0;
    13             if( (gird[i+1][j]==0&&i+1<=2000) || (gird[i][j-1]==0&&j-1>=1) ||(gird[i+1][j-1]==0&&i+1<=2000&&j-1>=1) )
    14                 gird[i][j]=1;
    15         }
    16     }
    17 /*    while(scanf("%d%d",&n,&m)&&(n!=0||m!=0))
    18     {
    19         n=2000-n+1;
    20         if(gird[n][m]==1)
    21             printf("Wonderful!\n");
    22         else
    23             printf("What a pity!\n");
    24 
    25     }
    26     */
    27     for(i=1;i<=20;++i)
    28         for(j=1;j<=20;++j)
    29         {
    30             i=2000-i+1;
    31             printf("%d ",gird[i][j]);
    32             if(j==20)
    33                 printf("\n");
    34         }
    35 
    36     return 0;
    37 }

    然后提交代码

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int a,b;
     5     while(scanf("%d%d",&a,&b)&&(a!=0||b!=0))
     6     {
     7         if(a%2==0||b%2==0)
     8             printf("Wonderful!\n");
     9         else 
    10             printf("What a pity!\n");
    11     }
    12     return 0;
    13 }
  • 相关阅读:
    JDK Integer.reverse 算法实现分析
    HomeBrew更新
    时序数据简介
    MQTT协议简析
    Maven+Spring Profile实现生产环境和开发环境的切换
    Thread与Runnable的一个小陷阱
    HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
    该不该在C#中使用var关键词
    疑难问题解决备忘录(3)——ubuntu12.04配置vsftp本地用户登录
    疑难问题解决备忘录(2)——ubuntu12.04分配swap
  • 原文地址:https://www.cnblogs.com/symons1992/p/2849599.html
Copyright © 2011-2022 走看看