比赛 [不是Rapiz出的]农场主钦定NOIP模拟赛1 评测结果 AWWEEEEEEE
题目名称 Play with Power 最终得分 10
用户昵称 Riolu 运行时间 1.014 s
代码语言 C++ 内存使用 15.57 MiB
提交时间 2016-11-08 21:05:05
显示代码纯文本
/*=========================================*
  * Auther: Riolu
  * Time: 2016.11.8
  * ©Copyright 2016 Riolu. All Rights Reserved.
  *=========================================*/

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<string>
#include<ctime>
#include<cstring>
using namespace std;


typedef long long ll;
typedef double db;
const int N =2e3;
int n,t,a,b;
int win[N][N];

int dfs(int a,int b){	//函数返回的是该人 在ab的情况下 能不能赢 =1 赢 =0 输
	
	if(a<N && b<N && win[a][b]==-1)return 0;
	if(a<N && b<N && win[a][b]==1 )return 1;
	
	if(pow(a,b+1)>n && pow(a+1,b)>n){//无路可走
		if(a<N && b<N)win[a][b]=-1;
		return 0;//不能赢
	}
	int ga,gb,tmp;//ga=1 a++ 能赢
	if(pow(a+1,b)>n) ga=0;else{ tmp=dfs(a+1,b); if(tmp==1)ga=0; if(tmp==0)ga=1;}
	if(pow(a,b+1)>n) gb=0;else{ tmp=dfs(a,b+1); if(tmp==1)gb=0; if(tmp==0)gb=1;}
	
	
	if(ga || gb){if(a<N && b<N)win[a][b]=1; return 1;}
	if(a<N && b<N)win[a][b]=-1;return 0;
}

int main(){
	
	freopen("play.in","r",stdin);
	freopen("play.out","w",stdout);
	int num=0;

	cin>>n>>t;
	//cout<<log(100000000)/log(2)<<endl;
	while(t){ t--;
		cin>>a>>b;
		if(a==1&& b>log(n)/log(2)){
			cout<<"Missing"<<endl;
			continue;
		}
		int tmp;
		if(a!=1) {
			tmp=dfs(a,b);
			if(tmp==1)cout<<"Masha"<<endl;
			else if(tmp==0)cout<<"Stas"<<endl;
			}
		else {
			tmp=dfs(2,b);
			if(tmp==1)cout<<"Masha"<<endl;
			else if(tmp==0)cout<<"Missing"<<endl;
		}
	}

	return 0;
}
/*

*/