1. 程式人生 > >hdu 1730 Nim博弈

hdu 1730 Nim博弈

.cn 如果 class problem 異或 TE div 似的 scanf

題目來源:http://acm.hdu.edu.cn/showproblem.php?pid=1730

Nim博弈為:n堆石子,每個人可以在任意一堆中取任意數量的石子

n個數異或值為0就後手贏,否則先手贏

將這題轉化成Nim遊戲

可以在任意一行中移動任意距離,可以向左或右,但是仔細觀察發現,其實只能接近對方棋子,如果你遠離對方棋子,對方可以接近你相同距離

和nim相似的是,不能不移,所以兩個棋子的距離差就是SG值

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		int ans=0;
		for(int i=1;i<=n;i++)
		{
			int a,b;
			scanf("%d %d",&a,&b);
			ans^=int(abs(a-b)-1);
		}
		if(ans==0)cout<<"BAD LUCK!"<<endl;
		else cout<<"I WIN!"<<endl;
	}
	return 0;
}

  

hdu 1730 Nim博弈