P2421 [NOI2002]荒岛野人

洞穴数不超过1e6 ---> 枚举

判断每个野人两两之间是否发生冲突:exgcd

假设有$m$个洞穴,某两人(设为1,2)在$t$时刻发生冲突

那么我们可以列出方程

$c_{1}+p_{1}t\equiv c_{2}+p_{2}t (mod\quad m)$

移项一下:$(p_{1}-p_{2})t\equiv c_{2}-c_{1} (mod\quad m)$

去掉$(mod m)$,得$(p_{1}-p_{2})t-mx=c_{2}-c_{1} $

这不就是不定方程标准形式$ax+by=c$吗!

用exgcd搞搞,求出$t$的最小正整数解

如果$t<=min(l_{1},l_{2})$说明在两只的有生之年会发生冲突

此时$m$是不合法的,向下枚举就行了

复杂度$O(1e6n^{2}logp_{max})$,然鹅实际效率远高于介个

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define re register
  5. using namespace std;
  6. int min(int a,int b){return a<b?a:b;}
  7. int max(int a,int b){return a>b?a:b;}
  8. #define N 17
  9. int n,C[N],p[N],l[N],x0,y0,g;
  10. void exgcd(int a,int b,int &x,int &y){
  11. if(!b) g=a,x=,y=;
  12. else exgcd(b,a%b,y,x),y-=x*(a/b);
  13. }
  14. bool check(int b){
  15. for(int i=,a,c,q;i<=n;++i)
  16. for(int j=i+;j<=n;++j){
  17. a=((p[i]-p[j])%b+b)%b,c=C[j]-C[i];
  18. exgcd(a,b,x0,y0);q=b/g;//求ax+by=gcd(a,b)
  19. if(c%g) continue;
  20. x0=(x0*c/g%q+q)%q;//先*c/g转成原来的式子,再%(b/gcd(a,b))得到最小解
  21. if(<=x0&&x0<=min(l[i],l[j]))
  22. return ;
  23. }
  24. return ;
  25. }
  26. int main(){
  27. scanf("%d",&n); int st=;
  28. for(int i=;i<=n;++i)
  29. scanf("%d%d%d",&C[i],&p[i],&l[i]),st=max(st,C[i]);
  30. for(re int i=st;i<=;++i)//注意是从洞穴编号最大的那个开始枚举
  31. if(check(i)){printf("%d",i);break;}
  32. return ;
  33. }

bzoj1407 / P2421 [NOI2002]荒岛野人(exgcd)的更多相关文章

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

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

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

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

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

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

  4. Luogu P2421 [NOI2002]荒岛野人

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

  5. P2421 [NOI2002]荒岛野人

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

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

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

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

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

  8. [NOI2002]荒岛野人(exgcd,枚举)

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

  9. 题解 P2421 【[NOI2002]荒岛野人】

    我的第一道数论紫题 首先,我们先看两个野人,他们相遇的充要条件是 \(C_i+P_i\times k\equiv C_j+P_j\times k\;(mod\;M)\) 其中\(k\)是第几年,且\( ...

随机推荐

  1. 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之LayerColor(8)

    在前面文章中讲述了Cocos2d-x引擎OpenGL渲染准备Shader方面,本文主要讲解使用LayerColor来讲述OpenGL的渲染过程. 1.LayerColor对象创建 添加LayerCol ...

  2. ASP.NET 4.0尚未在Web服务器注册 解决

    http://www.cnblogs.com/lvxiouzi/p/3511446.html 安装asp.net 4.0.30319.0版本 命令: %windir%\Microsoft.NET\Fr ...

  3. 解决提示“配色方案已更改为Windows7 Basic”

    WIN7是很多用户都用过的系统,是由微软推出的.下面就说一个小技巧. 如何解决Win7系统提示:“配色方案已更改为Windows 7 Basic”解决方案.   更改Win7配色方案 首先,右击桌面空 ...

  4. JS:“分享到”之类的悬浮框的运动原理(代码)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 谈谈后台服务的RPC和路由管理

    版权声明:本文由廖念波原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/147 来源:腾云阁 https://www.qclo ...

  6. weblogic新漏洞学习cve-2017-10271

    一.原理: 很明显啦,readobject又出来背锅了,一个XML的反序列化漏洞导致的命令执行. 具体原理我看不懂java代码的我也只能学习别人的分析.给出一篇参考文章,写的非常详细: 漏洞原理 二. ...

  7. ORA-28056 解决方法

    用pl/sql devlper 来连接oracle数据库,遇到 0RA-28056错误,解决的方法是 在 计算机-->管理 -->事件查看器里边清理应用程序日志(问题原因是应用程序的日志满 ...

  8. 【BZOJ4774/4006】修路/[JLOI2015]管道连接 斯坦纳树

    [BZOJ4774]修路 Description 村子间的小路年久失修,为了保障村子之间的往来,法珞决定带领大家修路.对于边带权的无向图 G = (V, E),请选择一些边,使得1 <= i & ...

  9. [python] python单元测试经验总结

    python写单元大多数都会用到unittest和mock,测试代码覆盖率都会用到coverage,最后再用nose把所有的东西都串起来,这样每次出版本,都能把整个项目的单元测试都运行一遍. Unit ...

  10. Vue 学习顺序

    起步: 1.扎实的 JavaScript / HTML / CSS 基本功,ES6 最好过一遍 2.通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script&g ...