您的位置:首页 > 其它

HDU 1730 Northcott Game

2012-04-20 19:34 239 查看
只是一道取石子游戏的变形题,刚开始我想着去打表,一直打不出后来画图就一下子清楚了;

我们来分析只有一行的情况:

我们知道只要黑白棋子之间有空格,只要谁先走就一定谁赢,因为先走者一定会走到与两个棋子之间没有空格的地方,这样才能保证他赢,我们看成取石子且石子只有一堆的情况;

那么多行时,我们就可以把两个棋子之间的空格看成有多少个石子,而行可以看成有多少堆,再利用Nim就可以解决问题了;

View Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
using namespace std;

int main(  )
{
int n , m,a,b;
while( scanf( "%d %d",&n,&m )==2 )
{
int t = 0 ;
for( int i = 0 ; i < n ; i ++ )
{
scanf( "%d %d",&a,&b );
if( a < b )
{
a ^= b;
b ^= a;
a ^= b;
}
t ^= ( a - b - 1 );
}
if( t ) puts( "I WIN!" );
else puts( "BAD LUCK!" );
}
//system( "pause" );
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: