Gym 102452B Binary Tree 博弈

http://www.caiyiwen.tech/article/18.html

  • B - Binary Tree
    • 簡單的樹上博弈題,考察的是透過現象看本質、不被輸入帶偏的能力。
    • 首先我們知道,滿k層二叉樹的結點數爲1+2+2²+2³+……+2k-1=2k-1
    • 注意到上面2^k-1這個數爲奇數,我們還知道,任意一個數減去一個奇數都會改變其奇偶性。(奇數-奇數=偶數,偶數-奇數=奇數)
    • 最終勝利態爲0(樹上結點全部拿完,淪爲空樹),是一個偶數。
    • 如果一棵樹上有奇數個結點,那麼我們需要奇數次操作將其變成偶數;
    • 如果一棵樹上有偶數個結點,那麼我們需要偶數次操作將其變成偶數。
    • 奇數次操作,則最後一個拿到根節點的人爲A;偶數次操作即爲B。
    • (千萬不要看到題目就去建樹,這題的樹是背景而不是解題模型)

代碼:

#include<cstdio>
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int n;
		scanf("%d",&n);
		int x,y;
		for(int i=0;i<n-1;++i)
		{
			scanf("%d%d",&x,&y);
		}
		if(n&1)
		{
			printf("Alice\n");
		}
		else
		{
			printf("Bob\n");
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章