ural 1180. Stone Game (博弈)

#include <iostream>
using namespace std;

int main()
{
	int i, j, h;
	char n[300];
	cin>>n;
	h = strlen(n);
	j = 0;
	for (i=0; i<h; i++)
		j = (j * 10 + (n[i] - '0')) % 3;
	if (j == 0)
		cout<<2<<endl;
	else
		cout<<1<<endl<<j<<endl;
}




首先寫出前幾個局面:
必勝:1,2,4,5,7,8,10,11...
必敗:3,6,9,12,15...
猜想:n = 3*k時必敗
證明:
k = 1時成立.
假設k = m時成立;
當k = m+1時,n =3*k+3
由於所取石子數必須時2的指數,所以n不可能導向一個3的倍數的局面,也就是n取出一定石子必定是必勝局面,所以n是必敗局面,證畢.
注意:n的範圍很大,要用大數取模,用字符串讀入.


發佈了202 篇原創文章 · 獲贊 6 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章