洛谷P2421:https://www.luogu.org/problemnew/show/P2421

思路

从洞的最大编号开始增大枚举答案

对于每一个枚举的ans要满足Ci+k*Pi≡Cj+k*Pj(mod ans)的k ,都要k>min(L[i],L[j]) 

因为这个ans一定要满足在一个野人死之前可以满足条件

根据上式可以推出Ci+k*Pi=Cj+k*Pj+m*ans   移项得k*(Pi-Pj)+m*ans=Cj-Ci

即可用Exgcd求解此式子

代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define maxn 20
int n,Max;
int C[maxn],P[maxn],L[maxn];
int gcd(int a,int b)
{
if(!b) return a;
else
return gcd(b,a%b);
}
void exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=;
y=;
}
else
{
exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
}
}
bool check(int ans)
{
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)//枚举所有的野人
{
int a=P[i]-P[j],c=C[j]-C[i],b=ans,d=gcd(a,b),x=,y=;
if(c%d==)//运用Exgcd求解
{
a=a/d,b=b/d,c=c/d;
exgcd(a,b,x,y);
b=abs(b);
x=((x*c)%b+b)%b;
if(!x) x+=b;
if(x<=min(L[i],L[j])) return false;//满足一个野人已死亡
}
}
}
return true;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
cin>>C[i]>>P[i]>>L[i];
Max=max(Max,C[i]);//求出洞的最大编号
}
for(int i=Max;;i++)//ans至少要大于最大编号
{
if(check(i))//如果满足条件
{
cout<<i;
return ;
}
}
}

【题解】洛谷P2421[NOI2002]荒岛野人 (Exgcd)的更多相关文章

  1. 洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)

    题目背景 原 A-B数对(增强版)参见P1102 题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,… ...

  2. 洛谷 P2421 [NOI2002]荒岛野人

    题目描述 又是一道扩欧的题. 要求一个最小的m使得 Ci+Pi*x≡Cj+Pj*x mod m(i!=j) 在x在第i个人和第j个人的有生之年无解. 也就是 (Pi-Pj)*x+m*y=Cj-Ci 在 ...

  3. bzoj1407 / P2421 [NOI2002]荒岛野人(exgcd)

    P2421 [NOI2002]荒岛野人 洞穴数不超过1e6 ---> 枚举 判断每个野人两两之间是否发生冲突:exgcd 假设有$m$个洞穴,某两人(设为1,2)在$t$时刻发生冲突 那么我们可 ...

  4. bzoj1407,洛谷2421 NOI2002荒岛野人

    题目大意: 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针向前走P ...

  5. P1516 青蛙的约会和P2421 [NOI2002]荒岛野人

    洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...

  6. Luogu P2421 [NOI2002]荒岛野人

    最近上课时提到的一道扩欧水题.还是很可做的. 我们首先注意到,如果一个数\(s\)是符合要求的,那么那些比它大(or 小)的数不一定符合要求. 因此说,答案没有单调性,因此不能二分. 然后题目中也提到 ...

  7. P2421 [NOI2002]荒岛野人

    传送门 答案不大于 $10^6$,考虑枚举答案 对于枚举的 ans,必须满足对于任意 i,j(i≠j) 都有 使式子$c_i+kp_i \equiv c_j+kp_j\ (mod\ ans)$成立的最 ...

  8. P2421 [NOI2002]荒岛野人 扩展欧几里得 枚举

    Code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  9. 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解

    花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...

随机推荐

  1. hdu 2845——Beans——————【dp】

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. 经典算法详解(1)斐波那契数列的n项

    斐波那契数列是一个常识性的知识,它指的是这样的一个数列,它的第一项是1,第二项是1,后面每一项都是它前面两项的和,如:1,1,2,3,5,8,13,21,34,55,89,144,233…… 说明:由 ...

  3. 深入理解理解 JavaScript 的 async/await

    原文地址:https://segmentfault.com/a/1190000007535316,首先感谢原文作者对该知识的总结与分享.本文是在自己理解的基础上略作修改所写,主要为了加深对该知识点的理 ...

  4. bzoj 5329: [Sdoi2018]战略游戏

    Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...

  5. 原生js与jquery的区别

    1.选择器: js: $('.car_img_con img')[0]; var jsObj = document.getElementsByClassName('sel_index_block')[ ...

  6. 【Linux】安装配置Tomcat7

    第一步:下载Tomcat安装包 下载地址:https://tomcat.apache.org/download-70.cgi [root@localhost ~]# wget http://mirro ...

  7. Csharp:操作存儲過程輸出參數,和返回值

    /// <summary> ///塗聚文 存儲過程輸出參數,和返回值 /// 20131030 /// Geovin Du /// </summary> /// <par ...

  8. Drupal中hook_theme函数用法

    在开发的时候不免要使用到drupal theme 定义.举个简单的例子: 复制代码 代码如下: <?phpfunction modulename_theme() { //开始定义自己的theme ...

  9. vue 音乐播放器报错

    使用Vue报错[Vue warn]: Error in nextTick: "TypeError: fn.bind is not a function"页面进不去. 检查:看看da ...

  10. Eclipse SWT

    Reference: http://www.eclipse.org/swt/ http://www.functionx.com/win32/Lesson01.htm http://www.win32d ...