HDU 2147 kiki's game

HDU 2147 kiki's game
能够转移到某个必败状态的为必胜状态,只能转移到必胜状态的为必败状态。
根据这个递推即可,d[i][j]==1表示在i*j的棋盘上游戏,kiki必胜。
网上许多人对于这道题是判断奇偶性:先递推,然后发现规律。
开2000×2000的bool数组会超空间,使用bitset即可。
以下是我的代码:
#include < bitset >
#include
< cstdio >
using   namespace  std;
const   int  dx[] = { 0 , - 1 , - 1 },dy[] = { - 1 , 0 , - 1 };

bitset
< 2007 >  d[ 2007 ];

void  Init()
{
    d[
1 ][ 1 ] = 1 ;
    
for ( int  i = 1 ;i <= 2000 ;i ++ )
        
for ( int  j = 1 ;j <= 2000 ;j ++ )
        {
            
bool  success( false );
            
for ( int  k = 0 ;k < 3 ;k ++ )
            {
                
int  ii(i + dx[k]),jj(j + dy[k]);
                
if (ii <= 0   ||  jj <= 0 )
                    
continue ;
                
if (d[ii][jj] == 0 )
                {
                    d[i][j]
= 1 ;
                    success
= true ;
                    
break ;
                }
            }
            
if ( ! success)
                d[i][j]
= 0 ;
        }
}

int  main()
{
    Init();

    
int  n,m;
    
while (scanf( " %d%d " , & n, & m) == 2   &&  (n  ||  m))
        
if (d[n][m])
            printf(
" Wonderful!\n " );
        
else
            printf(
" What a pity!\n " );

    
return   0 ;
}

你可能感兴趣的:(HDU 2147 kiki's game)