人生第一次做NOI的题祭!!!

大概是NOI最简单的一道题

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

每个野人i有一个寿命值Li,即生存的年数。

下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。

(图片就不考了)

我们发现这道题奇怪的给了答案的数据规模,这就说明我们可以枚举答案。

然后我们发现n的数据规模很小,n^2*m似乎可以过。

我们对于每一个答案,枚举任意两个人是否不会相遇。

对于每两个野人,我们可以根据他们的C和P列出同余方程:

Ci+Pi*x≡Cj+Pj*x(mod b)  其中x是年数,b是枚举的答案。

然后,将这个同余方程转化为不定方程,然后求解。

Ci+Pi*x=Cj+Pj*x+b*-y(-y是一个构造的新的未知数)

(Pi-Pj)*x+b*y=Cj-Ci

然后用拓展欧几里得求解(这是解析)求解

最后一定要注意!!!(因为在这里卡了几个小时)求完特解以后,要保证最终解为正。

通常情况,只需要(x*(Cj-Ci)/d(最小公约数)+b/d)%b/d就可以了。

但是注意Cj-Ci可能为负,而且c++的负数取模的机制是取决于被模数,被模数为正则余数为正,为负则反之。

而因为Cj-Ci可能为负,可能导致最终答案依然为负。

故此,我们将x*(Cj-Ci)/d先模b/d,保证其绝对值是小于b/d的,但是,b/d也可能为负(因为d可能为负),所以即使加上一个b/d也不能保证结果为正。

因此,我们把最后加上的b/d变成一个它的倍数且保证它为正的,可以替换为b或者b/d的绝对值。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define MAXN 10010
#define in(a) a=read()
#define REP(i,k,n) for(int i=k;i<=n;i++)
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int c[],p[],l[];
int t;
inline void exgcd(int a,int b,int &d,int &x,int &y){
if(b==) x=,y=,d=a;
else exgcd(b,a%b,d,x,y),t=x,x=y,y=t-a/b*y;
}
inline bool check(int k){
REP(i,,n)
REP(j,i+,n){
int a=p[i]-p[j],b=k,x,y,d;
exgcd(a,b,d,x,y);
if((c[j]-c[i])%d!=) continue;
x=((x*(c[j]-c[i])/d)%(b/d)+(abs(b/d)))%(b/d);//保证x为正
if(x<=min(l[i],l[j])) return ;
}
return ;
}
int main(){
in(n);
REP(i,,n) in(c[i]),in(p[i]),in(l[i]),m=max(m,c[i]);
REP(i,m,) if(check(i)){ cout<<i<<endl; return ;}
return ;
}

NOI 2002 荒岛野人的更多相关文章

  1. 【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 ...

  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. NOI2002 荒岛野人

    这题其实黑书上有,只是我脑残的没想起来…… 其实就是拓展欧几里得算法 我参看的题解:http://www.cnblogs.com/Rinyo/archive/2012/11/25/2788373.ht ...

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

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

  6. Luogu P2421 [NOI2002]荒岛野人

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

  7. 【NOI2002】荒岛野人

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

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

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

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

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

随机推荐

  1. bzoj千题计划216:bzoj1499: [NOI2005]瑰丽华尔兹

    http://www.lydsy.com/JudgeOnline/problem.php?id=1499 预处理从每个位置向每个方向最多能走几步 dp[k][i][j] 第k个时间段后,钢琴到位置(i ...

  2. WebSockets Tutorial(教程一)WebSockets简介

    一.WebSockets简介 以字面意思来说,握手可以被定义为两个人抓住和握手右手,象征着问候,祝贺,同意或告别.在计算机科学中,握手是确保服务器与客户端同步的过程.握手是Web Socket协议的基 ...

  3. html template--(来自网易)

    html template   概述 包含完整头部信息和主体结构的HTML基础模板. 代码展示 <!DOCTYPE html> <html> <head> < ...

  4. 也谈创业企业CEO该拿多少工资

    网上看到一篇文章,关于创业公司CEO要给自己开多少工资. 当然,原文中的一些创业公司例子都过于高大上,譬如一创业就拿到A轮B轮的融资.对于这样的案例我想说的是:“太脱离人民大众创业者”. 纵观我国的I ...

  5. HDU 4508 湫湫系列故事——减肥记I (完全背包)

    题意:有n种食物,每种食物可以给湫湫带来一个幸福感a,同时也会给她带来b的卡路里的摄入,然后规定她一天摄入的卡路里的量不能超过m,一共有n种食物,问可以得到的 最大的幸福感是多少? 解题报告:一开始以 ...

  6. PHP5.6 和PHP7.0区别

    1. PHP7.0 比PHP5.6性能提升了两倍. 2.PHP7.0全面一致支持64位. 3.PHP7.0之前出现的致命错误,都改成了抛出异常. 4.增加了空结合操作符(??).效果相当于三元运算符. ...

  7. 分模块开发创建service子模块——(八)

    1.右击父工程新建maven子模块

  8. Linux那些事儿之我是Hub(大结局)挂起自动化【转】

    转自:http://blog.csdn.net/fudan_abc/article/details/1805471 目睹了当今大学校园的素质流氓化,kiss公开化,消费白领化,上课梦游化,逃课普遍化, ...

  9. 在windows上实现多个java jdk的共存解决办法

    转自:https://www.cnblogs.com/jianyungsun/p/6918024.html 分析问题 为了多快好省的解决当前的问题,我的想法是在windows中同时安装jdk1.6和j ...

  10. 【译】ASP.NET Identity Core 从零开始

    原文出自Rui Figueiredo的博客,原文链接<ASP.NET Identity Core From Scratch> 译者注:这篇博文发布时正值Asp.Net Core 1.1 时 ...