社区讨论

求助!样例都过不了

P2421[NOI2002] 荒岛野人参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6yq2cu
此快照首次捕获于
2025/11/20 13:00
4 个月前
此快照最后确认于
2025/11/20 13:00
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct sd{
	int c,p,l;
}person[20];
int n,limit;
void exgcd(int a,int b,int &d,int &x,int &y)
{
	if(b==0)
	{d=a;x=1;y=0;}
	else{
		exgcd(b,a%b,d,x,y);
		int t;
		t=x;x=y;y=t-(a/b)*y;
	}
}
int main()
{
	int a,b,d,qm,qn,kx,ky;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	 scanf("%d%d%d",&person[i].c,&person[i].p,&person[i].l);
	 limit=max(person[i].c,limit);
    }
	for(int i=limit;i<=1000000;++i)
	{
		bool flag=true;
		for(int j=1;j<=n;++j)
		{
		 for(int k=j+1;k<=n;++k)
		 {
		 	int x,y;
		 	a=person[j].p,b=person[k].p;
		 	qm=person[j].c,qn=person[k].c;	
		 	exgcd(((a-b)%i+i)%i,i,d,x,y);
		 	if((qm-qn)%d!=0) continue;
		 		kx=(qm-qn)/d*(x);
		 		kx=(kx%(i/d)+(i/d))%(i/d);
		 		if(kx<=min(person[j].l,person[k].l))
		 		{
		 		  flag=false;
				  break;
				}
				continue;
		 }
		 if(!flag) break;
	   }
	   if(!flag) continue;
	   printf("%d",i);
	   return 0;
	}
}

回复

0 条回复,欢迎继续交流。

正在加载回复...