洛谷 P5635 【CSGRound1】天下第一
需要用short防止MLE,然后记忆化记录状态
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int t,x,y,mod;//定义
short book[10010][10010];
int rem(int x,int y)
{
if(book[x][y] == -1) return -1;//再次遇到这组x,y进入循环节了..
if(book[x][y]) return book[x][y];
book[x][y]=-1;//标记
if(!x) return book[x][y]=1;
if(!y) return book[x][y]=2;
int num=(x+y)%mod;//num=处理后的x 《(num+y)%mod=处理后的y
return book[x][y]=rem(num,(num%mod+y)%mod);//记忆化记录搜索结果
}
int main()
{
scanf("%d%d",&t,&mod);
for(int i=0;i<t;i++)
{
scanf("%d %d",&x,&y);
int ans=rem(x,y);//搜索
if(ans == -1) printf("error\n");
else if(ans == 1) printf("1\n");
else printf("2\n");
}
return 0;
}