题目:http://codevs.cn/problem/1747/

  对于一个环,我们经常用取余来表示它走过若干圈后的位置

  那么第 i 个野人第 x 年时所在的位置可表示为:(c[i]+p[i]*x)%m (若结果为 0 则变为 m)

  若两个野人不产生冲突,则在它们俩最小的寿命之内,每一年的位置都会不同

  可列出不等式,对于第 i 和第 j 号野人,(c[i]+p[i]*x)%m!=(c[j]+p[j]*x)%m

  但是不等式十分不好解,则把它转化为等式,并做变换

  (c[i]+p[i]*x)%m=(c[j]+p[j]*x)%m

  c[i]+p[i]*x+my1=c[j]+p[j]*x+my2

  p[i]*x-p[j]*x+my1-my2=c[j]-c[i]

  (p[i]-p[j])*x+m(y1-y2)=c[j]-c[i]

  其中 y1 与 y2 取多少我们不关心,因为它只是一个走多少圈的问题,把它合为 y

  再设 a=p[i]-p[j] , b=m , c=c[j]-c[i]

  方程化为 ax+by=c

  这就是一个解不等式的问题,用 exgcd 求

  (exgcd 扩展欧几里德算法详解:

    http://www.cnblogs.com/hadilo/p/5914302.html

  要求无解(不会遇上)或者得到的最小解大于 min(l[i],l[j]) (在寿命短的那个野人死后才遇上)

  那么枚举 m ,然后 n2 的判断是否有会遇上的情况即可

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; const int N=;
int d[N],p[N],l[N],x,y,n,m;
inline int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
inline void exgcd(int a,int b)
{
if (b)
{
exgcd(b,a%b);
int k=x;
x=y;
y=k-a/b*y;
}
else y=(x=)-;
}
bool check()
{
int i,j,a,b,c,r;
for (i=;i<n;i++)
for (j=i+;j<=n;j++)
{
a=p[i]-p[j];
b=m;
c=d[j]-d[i];
r=gcd(a,b);
if (c%r) continue;
exgcd(a,b);
b=abs(b/r);
x=(x/r*c%b+b)%b;
if (!x) x+=b;
if (x<=min(l[i],l[j])) return ;
}
return ;
}
int main()
{
int i,s=;
scanf("%d",&n);
for (i=;i<=n;i++)
{
scanf("%d%d%d",&d[i],&p[i],&l[i]);
s=max(d[i],s);
}
for (m=s;check();m++);
printf("%d\n",m);
return ;
}

版权所有,转载请联系作者,违者必究

联系方式:http://www.cnblogs.com/hadilo/p/5932395.html

CodeVS1747_NOI2002_荒岛野人_Savage_C++的更多相关文章

  1. BZOJ1407_NOI2002_荒岛野人_Savage_C++

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1407 题解:http://www.cnblogs.com/hadilo/p/5951091.h ...

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

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

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

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

  4. 【BZOJ】1407 NOI 2002 荒岛野人Savage

    拓展欧几里得入门题 两个野人若要走到同一个洞穴,设他们走了x步,则p[i]*x+c[i]≡p[j]*x+c[j](mod ans),ans即答案: 移项得到(p[i]-p[j])*X+ansY=c[j ...

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

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

  6. Luogu P2421 [NOI2002]荒岛野人

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

  7. NOI 2002 荒岛野人

    人生第一次做NOI的题祭!!! 大概是NOI最简单的一道题 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,… ...

  8. 【NOI2002】荒岛野人

    [题解] 可以枚举m 那么任意两个野人之间有 c[i]+x*p[i]=c[j]+x*p[j] (mod m)  无解,或 x 的最小值<=min(l[i] , l[j]) 化为丢番图方程:(p[ ...

  9. 【题解】洛谷P2421[NOI2002]荒岛野人 (Exgcd)

    洛谷P2421:https://www.luogu.org/problemnew/show/P2421 思路 从洞的最大编号开始增大枚举答案 对于每一个枚举的ans要满足Ci+k*Pi≡Cj+k*Pj ...

随机推荐

  1. C++学习014函数值传递和地址传递

    当我们给一个函数传参数的时候,可以直接值传入函数,也给可以把一个地址传入函数 区别就是一个本身不被改变,而另一本身也在改变, 在开发时候都会用到, 这里做下记录 #include <iostre ...

  2. (Python爬虫01)-本想给随笔加个序号才发现这么不方便

    本想给随机加个序号,才发现还得去返回看看文章的序号.好在cnblog能断点自动保存. 作为一个小程序员,点赞的同时还在想,谁知道咋实现这种实时保存呢?有知道的给个参考文档呗.太感激了! 重点在这里 有 ...

  3. 维特比算法(Viterbi)及python实现样例

    维特比算法(Viterbi) 维特比算法 维特比算法shiyizhong 动态规划算法用于最可能产生观测时间序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔科夫模型中.术语“维特 ...

  4. Cassandra 在CQL中使用函数

    CQL 3.1 最后更新 2015年10月10日 maxTimeuuid() now() dateOf() minTimeuuid() --假设表结构如下 create table user ( us ...

  5. 如何使用remix

    ---恢复内容开始--- 教程 | [Ethereum 智能合约开发笔记]使用 Remix Ajian | 3. Feb, 2018 | 621 次阅读 教程 Remix 开发工具 之前有自己开发过E ...

  6. Windows server 2012 R2开机进入cmd,关闭后黑屏问题

    原因分析: 因为自己在卸载IIS的时候,不小心卸载了.net framework,系统没有了图形界面(由完整模式Full变为了核心模式core),需要重新恢复.net framework4.5. 解决 ...

  7. lincode-58-四数之和

    58-四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d). 注意事项 四元组(a, b, c, d)中,需要满足a <= b &l ...

  8. php数据缓存到文件类设计

    // 自定义缓存类 class Cache_Filesystem { // 缓存写保存 function set ($key, $data, $ttl) { //打开文件为读/写模式 $h = fop ...

  9. [Leetcode] Symmetric tree 对称二叉树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  10. 洛谷P4593 [TJOI2018]教科书般的亵渎 【数学】

    题目链接 洛谷P4593 题解 orz dalao upd:经典的自然数幂和,伯努利数裸题 由题我们只需模拟出代价,只需使用\(S(n,k) = \sum\limits_{i = 1}^{n} i^{ ...