洛谷 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;
}

 

posted @ 2023-07-25 16:18  浪矢-CL  阅读(16)  评论(0编辑  收藏  举报