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

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

枚举最小年份,然后判断此年份是否可行;

如何判断可行,只要两个野人有生之年都不会在一个洞里住,那么就可行;

枚举i,j野人,得ci-cj=(pj-pi)*x+ky      x表示会相遇的年份;

若无解,说明不会碰到;

否则用ex_gcd求出一个解,然后根据这个解求出x的最小正整数解,与min(l[i],l[j])比较一下,即可判断;

我犯的主要错误是,算出一个x后,x=x*(c[i]-c[j])/d,x=(x%k+k)%k,这里的k应换成k/d,这是由于x+k*t固然是它的解集,但是由于k和p[j]-p[i]之间还有一些公因数,所以漏掉了一些情况,所以计算之前先将k/d,这样就不会再wa了;

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
#define LL long long
const int maxn=;
void gcd(int a,int b,int &d,int &x,int &y){
if(b==){d=a;x=;y=;return;}
gcd(b,a%b,d,x,y);
int t=x;
x=y;
y=t-a/b*x;
}
int gcd(int a,int b){return b==?a:gcd(b,a%b);}
int c[maxn],p[maxn],l[maxn],n,Left=;
void init(){
cin>>n;
for(int i=;i<=n;i++){cin>>c[i]>>p[i]>>l[i];Left=max(Left,c[i]);}
int x,y,d,kl;
for(int k=Left;k<=;k++){
bool flag=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
if(flag)break;
gcd(p[j]-p[i],k,d,x,y);
if((c[i]-c[j])%d)continue;
x=x*(c[i]-c[j])/d;
kl=k/d;
x=(x%kl+kl)%kl;
if(x<=l[i]&&x<=l[j])flag=;
}
if(!flag){printf("%d\n%d\n",k,clock());return;}
}
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
init();
return ;
}

其实我更想吐槽把10^6,弄成106的事情,即使一般有经验的人都不会被坑;

[noi2002]荒岛野人 拓展欧几里得的更多相关文章

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

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

  2. JZYZOJ1372 [noi2002]荒岛野人 扩展欧几里得

    http://172.20.6.3/Problem_Show.asp?id=1372 想法其实很好想,但是我扩展欧几里得还是用得不熟练,几乎是硬套模板,大概因为今天一个下午状态都不大好.扩展欧几里得算 ...

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

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

  4. BZOJ-1407 Savage 枚举+拓展欧几里得(+中国剩余定理??)

    zky学长实力ACM赛制测试,和 大新闻(YveH) 和 华莱士(hjxcpg) 组队...2h 10T,开始 分工我搞A,大新闻B,华莱士C,于是开搞: 然而第一题巨鬼畜,想了40min发现似乎不可 ...

  5. 【lydsy1407】拓展欧几里得求解不定方程+同余方程

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1407 题意: 有n个野人,野人各自住在第c[i]个山洞中(山洞成环状),每年向前走p[i] ...

  6. NOIP2012拓展欧几里得

    拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...

  7. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  8. bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得

    这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...

  9. POJ 2891 Strange Way to Express Integers(拓展欧几里得)

    Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...

随机推荐

  1. HDU 2874 Connections between cities(LCA)

    题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...

  2. LightOj 1215 Finding LCM

    Discription LCM is an abbreviation used for Least Common Multiple in Mathematics. We say LCM (a, b, ...

  3. XCode 4.3 Unable to load persistent store UserDictionary.sqlite 以及 ios simulator failed to install the application

    I have been working on an iOS app for some time, all of a sudden I am getting the following crash ev ...

  4. Handler处理机制

    handler缺点:如果要运送两种类型的数据(比如一个Bitmap,一个Object)就不能运送,但可以用Bunder来传输  *    使用handler的步骤:  *    1.创建一个handl ...

  5. VS中的 MD/MT设置 【转】

    VS系列工具作为目前微软主打的集成开发环境,在历经了近20多年的发展后,到如今已经可以 说是Windows平台上各种IDE环境中的翘楚了.很多别的开发工具已经难望其项背了,如今VS2010也已经面市很 ...

  6. HDU4126Genghis Khan the Conqueror(最小生成树+并查集)

    Genghis Khan the Conqueror Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 327680/327680 K ...

  7. What is love ? and how to do?

    1.匹配度(matched-degree): 灵性 文化(东西方.南北方) 智力 审美 性 2.对待差异的原则(The principle of difference): 抓大放小 求同存异 心脑并用 ...

  8. 3.nginx反向代理服务器+负载均衡

    nginx反向代理服务器+负载均衡 用nginx做反向代理和负载均衡非常简单, 支持两个用法: 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡 以反向代理为例, nginx不自 ...

  9. shell(1):网络配置、BATH环境和通配符

    一.临时配置网络(ip,网关,dns) ifconfig查看网络配置 修改ip地址  ifconfig ens33 192.168.255.129/24 ens33网卡名称.192.168.255.1 ...

  10. C# Select SelectMany 区别

    string[] text = { "Today is 2018-06-06", "weather is sunny", "I am happy&qu ...