码迷,mamicode.com
首页 > 其他好文 > 详细

荒岛野人题解

时间:2019-10-12 22:23:08      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:its   exgcd   枚举   false   const   can   using   条件   reg   

荒岛野人题解

我真的是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;
} 

荒岛野人题解

标签:its   exgcd   枚举   false   const   can   using   条件   reg   

原文地址:https://www.cnblogs.com/ljk123-de-bo-ke/p/11664167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!