天天看點

取(2堆)石子遊戲 HDU - 2177(威佐夫博弈)

double eqa = ( 1+sqrt(5.0)) / 2.0;
int main()
{
	int n, m;
	while (cin >> n >> m)
	{
		if (n == 0 && m == 0)break;
		if (n > m)swap(n, m);
		if ((int)((m - n)*eqa) == n) { puts("0");continue; }
		else
		{
			puts("1");
			int gp = m - n;
			f(i, 1, n)//同時減去,gap不變
			{
				int a = n - i, b = m - i;
				if (int(gp*eqa) == a)printf("%d %d\n", a, b);//拿走後讓對手陷入必敗
			}
			f(i, 1, m)
			{
				int a = n, b = m - i;
				if (a > b)swap(a, b);
				if ((int)((b - a)*eqa) == a)printf("%d %d\n", a, b);
			}
		}
	}
	return 0;
}