黑子今天又跑去姐姐大人的寝室玩了,今天黑子和姐姐大人玩取硬币,有一堆硬币共n枚,炮姐和黑子两个人轮流拿,炮姐先拿,每次最少拿1枚,最多拿k枚,拿到最后一枚硬币的人获胜,假设炮姐和黑子都非常聪明,拿硬币的过程中不会出现失误,给2个数n和k,问最后谁能赢得比赛。
输入
第1行,一个数t,一共有t组测试
数据范围:(1 <= t <= 10000)
第2-->t+1行,每行两个数n,k中间用空格分隔
数据范围: (1 <= n,k <= 10^9)输出
共t行
如果炮姐获胜输出“Misaka Mikoto Win”(不带引号)
如果黑子获胜输出“Shirai Kuroko Win”(不带引号)
如果炮姐获胜输出“Misaka Mikoto Win”(不带引号)
如果黑子获胜输出“Shirai Kuroko Win”(不带引号)
样例输入
4
3 2
4 2
7 3
8 3
样例输出
Shirai Kuroko Win
Misaka Mikoto Win
Misaka Mikoto Win
Shirai Kuroko Win
提示
样例1:n = 3,k = 2。无论炮姐如何拿,黑子都可以拿到最后1枚硬币
你可以把n个硬币分成好几组,每组的数量都是n 1,分好后会有两种情况。
1.刚好分成x组,每组有(k+1)个
这种情况下,如果第一个人拿a个,那第二个人就拿(k+1-a)个。每轮刚好可以拿完一组,这样就可以保证第二个人拿到最后一个硬币。
2.无法刚好分成x组。只好分成x 1组,前x组每组都有(k+1)个,最后一组的数量不足(k+1)个,假设只有b个这样的话只要,第一个人首先拿b个,情况就发生了反转,变成了第一种情况,只不过相当于换成了第二个人先拿。所以第一个人肯定可以拿到最后一枚硬币
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int a,b;
cin>>a>>b;
if(a%(b+1)==0)
printf("Shirai Kuroko Win\n");
else
printf("Misaka Mikoto Win\n");
}
return 0;
}