CF1194D 1-2-K Game (博弈論)


CF1194D 1-2-K Game

一道簡單的博弈論題


首先讓我們考慮沒有k的情況:

1. (n mod 3 =0)

因為n可以被分解成若干個3相加

而每個3可以被分解為1+2或2+1

所以無論A出什么B都有方法應對

B勝

2. (n mod 3 =1)

A可以先選擇余數1

這樣問題又回到了第一種情況

AB角色互換

A勝

3. (n mod 3 =2)

與2同理,A先選2即勝


而現在多出來的這個k也可以看成是3的某個自然數倍數加上一個小於3的數

\(k\equiv x\left( mod3\right)\)

我們再來對x分類討論:

1. (x=0)

此時的k就好像快速地切除1+2或2+1的回合

但對手總不會站着不動吧?

我們知道B總是有方法使每一回合內(A+B)%3都等於1的

列舉一下(k用3代替):

A:1 B:3

A:2 B:2

A:3 B:1

是不是每回合在mod3意義下都是相同的?

那么若干個回合后如果無法實現上述方法了

即n%=k+1

如果n=k A獲勝

否則情況又變回了無k的情況

%3判斷即可

2. (x=1)

此時k就好像有着能省略若干個回合功能的1

k就可有可無了

又回到了無k的情況

3. (x=2)

與2同理


知道了這些,代碼就很好寫了:

int n,k,t;
signed main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&k);
		if(k%3){
			if(n%3) puts("Alice");
			else puts("Bob");
		}
		else{
			n%=k+1;
			if(n==k||n%3) puts("Alice");
			else puts("Bob");
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM