荒岛野人题解
我真的是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; }