荒岛野人题解
荒岛野人题解
我真的是sha diao,这也没看出来,
两个野人不相遇,即是他们位置+走的步数mod m不相同,即不同余,
那我们只要枚举m,找出使条件满足的最小m不就行了
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int n,c[N],p[N],l[N],x,y,maxa=0;
int exgcd(int a,int b,int &x,int &y){
if(!b){x=1,y=0; return a;}
int o=exgcd(b,a%b,x,y); int t=x; x=y,y=t-(a/b)*y; return o;
}
bool check(int qq){
int q;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j){
q=qq;
int d=exgcd(p[i]-p[j],q,x,y);
if((c[j]-c[i])%d) continue;
q=q/d; int w=(c[j]-c[i])/d;
if(q<0) q=-q;
x=(x*w%q+q)%q;
if(!x) x=q;
if(x<=l[i]&&x<=l[j]) return false;
}
return true;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d%d%d",&c[i],&p[i],&l[i]),maxa=max(maxa,c[i]);
for(register int i=maxa;i<=1e6;++i) if(check(i)){printf("%d\n",i); return 0;}
return 0;
}