hdu2147 kiki's game

点击打开链接

第一次做这种题目,有点难委屈

题意:       

棋的初始点是(1,m),即右上角。        

下棋者只能往左边(left),左下面(left-underneath),下面(underneath),这三个方格下棋。 

解题思路: 只要画出NP图就可以发现规律了.

 N:必胜点(如果左边,左下角,下角有一个P点,那么这个点就是N点)

 P:必败点(如果左边,左下角,下角全都是N点,那么这个点就是P点) 

最后棋子一定到达(n,m)这个点,所以我们从这个点开始画。

 图:

NNNNNNNNN
PNPNPNPNP

NNNNNNNNN
PNPNPNPNP
NNNNNNNNN
PNPNPNPNP

NNNNNNNNN

PNPNPNPNP

发现规律了吧。 

代码:

#include<iostream>  
using namespace std;  
int main(void)  
{      
    int n,m; 
   while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0)     
   {          
       if(!(m&1))          
       {              
           cout<<"Wonderful!"<<endl;          
       }          
       else          
       {              
            if(!(n&1))                  
               cout<<"Wonderful!"<<endl;              
            else                  
                cout<<"What a pity!"<<endl;          //n和m都为奇数才输
      }      
   }      
    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值