NYOJ 23 取石子
取石子(一)
時間限制:3000?ms ?|?內存限制:65535?KB
難度:2
描述
一天,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
?題目連接:http://acm.nyist.net/JudgeOnline/problem.php?pid=23
第一次看這道題,還是在大一的時候,當時一頭霧水,毫無思路,也就擱置到那里了。昨天晚上再讀題,就按照由果索因的思想,找出了答案。
設N為石子的總數,M為一次最多可取的石子數,K為兩人取石子的總次數。
首先,若TT贏得了游戲,則他先把石子取完了,也就是在TT第K次(最后一次)取石子時,剩余的石子數小于等于M,可以是:1,2,3…M-1,M。為使第K-1次(倒數第二次)TT的室友取石子后,剩余的石子數為上面所述情況,第K-1次取石子時的石子數應為M+1,這樣無論TT的室友取的是1至M中的任意一個數,剩余石子數都小于等于M。
按照這個思想,推出最后的公式為:
N %(M+1) != 0時,TT可以贏得游戲。
代碼如下:
#include <stdio.h> int main() { int test_num, stone_num, max_fetch; scanf("%d", &test_num); while (test_num--) { scanf("%d%d", &stone_num, &max_fetch); if (stone_num % (max_fetch + 1) != 0) { printf("Win\n"); } else { printf("Lose\n"); } } return 0; }
總結
以上是生活随笔為你收集整理的NYOJ 23 取石子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划——Poj 1159 Palin
- 下一篇: 图像有用区域 bfs