取石子(一)
- 描述
- 一天,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
#include<iostream>
using namespace std;
int main()
{
int k;
long m,n;
cin>>k;
while(k--)
{
cin>>n>>m;
if(n%(m+1)==0)
cout<<"Lose"<<endl;
else
cout<<"Win"<<endl;
}
}
Lele和Yueyue雖然考試不行,但是對拍賣卻十分精通,而且他們兩個人都十分想得到這塊田地。所以他們每次都是選對自己最有利的方式進行加價。
由於Lele字典序比Yueyue靠前,所以每次都是由Lele先開始加價,請問,第一次加價的時候,
Lele要出多少才能保證自己買得到這塊地呢?
每組測試包含兩個整數M和N(含義見題目描述,0<N,M<1100)
如果Lele在第一次無論如何出價都無法買到這塊土地,就輸出"none"。
代碼:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int t,n,m,i;
while(~scanf("%d%d",&n,&m))
{
if(n<=m)//n<=m先手必勝
{
for(i = n; i<=m; i++)
if(i==n)
printf("%d",i);
else
printf(" %d",i);
printf("\n");
continue;
}
if(n%(m+1))//必勝態
{
int flag = 0;
for(i = 1; i<=m; i++)
{
if((n-i)%(m+1)==0)//必須留下m+1的倍數
{
if(flag == 0)
printf("%d",i);
else
printf(" %d",i);
flag++;
}
}
printf("\n");
}
else
printf("none\n");
}
return 0;
}