荒岛野人[exgcd]
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]相关推荐
- 题解 guP2421 【[NOI2002]荒岛野人】
本题珂以转换成一个式子 即求Ci + Pi × x ≡ Cj Pj × x (mod M) 的最小答案是否大于寿命最小值 以人数为最小值开始枚举山洞数,用扩展欧几里得计算最优答案是否大于寿命 若不大于 ...
- [NOI2002]荒岛野人 数论
题目:https://www.luogu.org/problemnew/show/P2421 题意: n个人 Ci表示每个人的位置 , Pi表示每个人的走的长度 Li表示生命值.不妨我们可以枚举总共有 ...
- 题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】
洛谷题目链接 bzoj题目链接 题目大意:给定\(n\)组\(C_i, P_i, L_i\),求最小的\(M\)使得对于任意的\(i,j (1 \leq i, j \leq n)\) \[C_i + ...
- NOI数学之提高级:初等数论
欧拉定理详解 欧拉定理详解_郝伟老师的博客--大数据.并行计算与人工智能时代-CSDN博客_欧拉定理 欧拉函数与欧拉定理 欧拉函数与欧拉定理_leader_one的博客-CSDN博客_欧拉定理 欧拉定 ...
- 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工
近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...
- acm数论之欧几里得gcd
1.欧几里得定理 同余定理的公式:(a+b)%mod=(a%mod+b%mod)%mod (a*b)%mod=(a%mod*b%mod)%mod 扩展欧几里得也有自己的一个公式:a*x+b*y=gcd ...
- 【题解刷题总结】青蛙的约会
题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...
- YBT 6 数学基础
$补+写题ing$ 第 1 章 快速幂 序列的第 k 个数 link $solution:$ 板子 A 的 B 次方 link $solution:$ 板子 [NOIP2013] 转圈游戏 link ...
- 扩展欧几里得及其应用
欧几里得算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数.其计算原理依赖于下面的定理:gcd(a,b)=gcd(a,a mod b) gcd函数就是用来求(a,b)的最大公约数的. ...
最新文章
- 使用iText在word文档中插入复杂的Table表格
- 博客园 页面定制CSS代码
- ubuntu ???????????? no permissions 问题解决
- oracle数sqlplus,sqlplus查询oracle数据库数据容量
- 搞懂Transformer
- MongoDB中关于64位整型存储解决方案
- CMS:文章管理之视图(6)
- NLP --- 隐马尔可夫HMM(极大释似然估计详解)
- STM32H7定时器输入捕获实现电容触摸按键
- 计算机和移动存储设备管理台账,如何建立涉密管理台账?
- 美妆行业如何在小红书营销推广?美妆品牌的线上推广怎么宣传更有效果?
- python编程学习笔记(三)
- intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
- 蔚来:汽车行业变革时代的人才招聘与培养战略
- 计算机科学与计算机技术!
- Linux雷鸟邮件,thunderbird雷鸟mail
- 计算机设置页眉教案,初中信息技术沪教版七年级下册第三单元第6课《设置页眉和页脚》优质课公开课教案教师资格证面试试讲教案...
- 电脑反复安装垃圾软件
- can总线不加末端电阻_山西CAN-BUS双绞屏蔽总线电缆,矿用阻燃网线厂家直销-天津电缆一分厂...
- 优动漫PAINT-百褶裙绘制教程
热门文章
- 云炬随笔20170201
- [scala-spark]6. 继承与特质trait
- 自编码器深度分析+定制特征描述子构建初探
- ARM中C语言和汇编语言的混合编程
- 【CyberSecurityLearning 30】Linux操作系统的用户和组、文件及目录权限
- fatal: 无法访问 ‘https://github.com/salesforce/WikiSQL/‘:GnuTLS recv error (
- 怎么改变光标Cursor(5种方法)
- struts2采用convention-plugin实现零配置
- 收藏一个有趣的帖子,现在的客户端真有点让人不安,难怪XSS。。。
- 二维数组中的查找---剑指Offer