Description
克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。每个野人i有一个寿命值Li,即生存的年数。下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;

每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。

奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇。他们想知道,至少有多少个山洞,才能维持岛上的和平呢?

Input
输入文件的第1行为一个整数N(1<=N<=15),即野人的数目。第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=10^6 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。

Output
输出文件仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。

Sample Input
3
1 3 4
2 7 3
3 2 1

Sample Output
6

Data Constraint

Hint
该样例对应于题目描述中的例子。
.
.
.
.
.
.

分析

我们并不知道ans是多少,也就是说我们不知道同余方程后边的mod是多少
所以我们要枚举一个mod数,这个mod数就是ans
一共有n个野人,所以一共有 n*(n-1)/2 个 同余方程
同余方程:c_i + a * p_i = c_j + a * p_j (mod ans)
x * (p_i - p_j) + y * ans = c_j - c_i
不满足条件就是 (c_j - c_i) % gcd(p_i-p_j,ans) ==0 且最小的非负整数解x<=min(l_i,L_j)
同余方程有解,两人会在有生之年遇到
.
.
.
.
.

程序:
#include<iostream>
#include<cstring>
using namespace std;
int g,n,c[20],p[20],l[20],ans;void exgcd(int a,int b,int &x,int &y)
{if (!b){x=1;y=0;g=a;return;}exgcd(b,a%b,y,x);y=y-a/b*x;
}int main()
{bool flag;cin>>n;for (int i=1;i<=n;i++){cin>>c[i]>>p[i]>>l[i];ans=max(ans,c[i]);}for (int p1,c1,x,y,mod;;ans++){flag=0;for (int i=1;i<n;i++){for (int j=i+1;j<=n;j++){p1=p[i]-p[j];c1=c[j]-c[i];if (p1<0){p1=-p1;c1=-c1;}exgcd(p1,ans,x,y);if (c1%g==0){mod=ans/g;if ((x*(c1/g)%mod+mod)%mod<=min(l[i],l[j])){flag=1;break;}}}if (flag==true) break;}if (!flag){cout<<ans;return 0;}}
}

转载于:https://www.cnblogs.com/YYC-0304/p/9499934.html

荒岛野人[exgcd]相关推荐

  1. 题解 guP2421 【[NOI2002]荒岛野人】

    本题珂以转换成一个式子 即求Ci + Pi × x ≡ Cj Pj × x (mod M) 的最小答案是否大于寿命最小值 以人数为最小值开始枚举山洞数,用扩展欧几里得计算最优答案是否大于寿命 若不大于 ...

  2. [NOI2002]荒岛野人 数论

    题目:https://www.luogu.org/problemnew/show/P2421 题意: n个人 Ci表示每个人的位置 , Pi表示每个人的走的长度 Li表示生命值.不妨我们可以枚举总共有 ...

  3. 题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】

    洛谷题目链接 bzoj题目链接 题目大意:给定\(n\)组\(C_i, P_i, L_i\),求最小的\(M\)使得对于任意的\(i,j (1 \leq i, j \leq n)\) \[C_i + ...

  4. NOI数学之提高级:初等数论

    欧拉定理详解 欧拉定理详解_郝伟老师的博客--大数据.并行计算与人工智能时代-CSDN博客_欧拉定理 欧拉函数与欧拉定理 欧拉函数与欧拉定理_leader_one的博客-CSDN博客_欧拉定理 欧拉定 ...

  5. 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工

    近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...

  6. acm数论之欧几里得gcd

    1.欧几里得定理 同余定理的公式:(a+b)%mod=(a%mod+b%mod)%mod (a*b)%mod=(a%mod*b%mod)%mod 扩展欧几里得也有自己的一个公式:a*x+b*y=gcd ...

  7. 【题解刷题总结】青蛙的约会

    题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...

  8. YBT 6 数学基础

    $补+写题ing$ 第 1 章 快速幂 序列的第 k 个数 link $solution:$ 板子 A 的 B 次方 link $solution:$ 板子 [NOIP2013] 转圈游戏 link ...

  9. 扩展欧几里得及其应用

    欧几里得算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数.其计算原理依赖于下面的定理:gcd(a,b)=gcd(a,a mod b) gcd函数就是用来求(a,b)的最大公约数的. ...

最新文章

  1. 使用iText在word文档中插入复杂的Table表格
  2. 博客园 页面定制CSS代码
  3. ubuntu ???????????? no permissions 问题解决
  4. oracle数sqlplus,sqlplus查询oracle数据库数据容量
  5. 搞懂Transformer
  6. MongoDB中关于64位整型存储解决方案
  7. CMS:文章管理之视图(6)
  8. NLP --- 隐马尔可夫HMM(极大释似然估计详解)
  9. STM32H7定时器输入捕获实现电容触摸按键
  10. 计算机和移动存储设备管理台账,如何建立涉密管理台账?
  11. 美妆行业如何在小红书营销推广?美妆品牌的线上推广怎么宣传更有效果?
  12. python编程学习笔记(三)
  13. intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
  14. 蔚来:汽车行业变革时代的人才招聘与培养战略
  15. 计算机科学与计算机技术!
  16. Linux雷鸟邮件,thunderbird雷鸟mail
  17. 计算机设置页眉教案,初中信息技术沪教版七年级下册第三单元第6课《设置页眉和页脚》优质课公开课教案教师资格证面试试讲教案...
  18. 电脑反复安装垃圾软件
  19. can总线不加末端电阻_山西CAN-BUS双绞屏蔽总线电缆,矿用阻燃网线厂家直销-天津电缆一分厂...
  20. 优动漫PAINT-百褶裙绘制教程

热门文章

  1. 云炬随笔20170201
  2. [scala-spark]6. 继承与特质trait
  3. 自编码器深度分析+定制特征描述子构建初探
  4. ARM中C语言和汇编语言的混合编程
  5. 【CyberSecurityLearning 30】Linux操作系统的用户和组、文件及目录权限
  6. fatal: 无法访问 ‘https://github.com/salesforce/WikiSQL/‘:GnuTLS recv error (
  7. 怎么改变光标Cursor(5种方法)
  8. struts2采用convention-plugin实现零配置
  9. 收藏一个有趣的帖子,现在的客户端真有点让人不安,难怪XSS。。。
  10. 二维数组中的查找---剑指Offer