荒岛野人题解

对着背影说爱祢 提交于 2019-12-01 06:09:33

荒岛野人题解

我真的是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;
} 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!