荒岛野人题解

Posted ljk123-de-bo-ke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了荒岛野人题解相关的知识,希望对你有一定的参考价值。

荒岛野人题解

我真的是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
",i); return 0;}
    return 0;
} 

以上是关于荒岛野人题解的主要内容,如果未能解决你的问题,请参考以下文章

p2421 荒岛野人

[noi2002]荒岛野人 拓展欧几里得

[NOI2002] 荒岛野人 扩展欧几里得算法

BZOJ1407 NOI 2002 荒岛野人Savage

cogs333 荒岛野人 扩展欧几里得

JZYZOJ1372 [noi2002]荒岛野人 扩展欧几里得