南陽理工ACM 題目23

2021-07-10 13:41:06 字數 1333 閱讀 3260

描述

一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他/她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n(1<=n<=1000000),兩個人輪番取出其中的若干個,每次最多取m個(1<=m<=1000000),最先把石子取完者勝利。我們知道,tt和他/她的室友都十分的聰明,那麼如果是tt先取,他/她會取得遊戲的勝利麼?

輸入

第一行是乙個正整數n表示有n組測試資料

輸入有不到1000組資料,每組資料一行,有兩個數n和m,之間用空格分隔。

輸出對於每組資料,輸出一行。如果先取的tt可以贏得遊戲,則輸出「win」,否則輸出「lose」(引號不用輸出)

樣例輸入

2

1000 1

1 100

樣例輸出

lose

win

【思路】:

如果tt想贏得這場比賽,即先把石子取完。務必保證tt最後一次取石子時,剩餘的石子數小於等於m,所以倒數第二次tt的室友取石子時務必保證,剩餘的石子數為m+1,這樣無論他取幾個石子(m-1),tt都能在最後一次全部取完。

#include

02.usingnamespacestd;

03.intmain()

04.

16.}

該題所用的理論:

巴什博弈(bash game,同餘理論

只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。

顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次

拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則:如果n=(m+1)r+s,(r為任意自然數,s

≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下

(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍

數,就能最後獲勝。

南陽理工ACM(題目56)

描述 給定兩個數m,n,其中m是乙個素數。將n 0 n 10000 的階乘分解質因數,求其中有多少個m。輸入第一行是乙個整數s 0 輸出輸出m的個數。樣例輸入 2 100 5 16 2樣例輸出 24 include int main void printf d n count return 0 最優...

南陽理工ACM(題目56)

描述 給定兩個數m,n,其中m是乙個素數。將n 0 n 10000 的階乘分解質因數,求其中有多少個m。輸入第一行是乙個整數s 0 輸出輸出m的個數。樣例輸入 2 100 5 16 2樣例輸出 24 include int main void printf d n count return 0 最優...

(南陽理工acm 題目57)6174問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述假設你有乙個各位數字互不相同的四位數,把所有的數字從大到小排序後得到a,從小到大後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087 8730 378 8352 853...