题意:在一个岛上,有n个野人。这些人开始住在c号洞穴,每一年走p个洞,而且他的生命有L年.问如果岛上的洞穴为一个圈,那么这个圈至少有多少个,才能使他们每年都不在同一个洞穴里。

分析:先假设一种简单的情况!假设有2个人。

   第一个人:c:1, p:2 ,L=3

   第二个人:c:   2,   p:   3,   L=4

假如:一共有8个洞:如图:

    这样就能保证。

数学知识:欧几里得拓展

     不定方程ax+by=c,由得,若x,y有整数x解(正负无所谓,但是注意正数解,在mod运算中)则, c能被gcd(a, b);

分析:如果,有两个野人在某一个洞穴相遇,则表明 (p1-p2)x+by=c1-c2;  有解。但是,如果他的最小整数解都小于两个野人的寿命,则也可以。

   那么,就是在枚举一共有多少山洞,然后判断是否满足。第一个满足的就是最小的洞数。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int c[], p[], L[];
int n; int gcd(int a, int b){
return b == ? a : gcd(b, a%b);
} void exgcd(int a, int b, int &x, int &y){
if (b == ){ x = ; y = ; return; }
exgcd(b, a%b, x, y);
int t = x; x = y; y = t - a / b*y;
}
bool fun(int m){
int x, y, A, B, C, t;
for (int i = ; i <= n; ++i)
for (int j = i + ; j <= n; ++j){
A = p[i] - p[j]; B = m; C = c[j] - c[i];
t = gcd(A, B);
if (C%t == ){
A /= t; B /= t; C /= t;
exgcd(A, B, x, y);
B = abs(B);
x = ((C*x) % B + B) % B;
if (x <= min(L[i], L[j]))return ;
}
}
return ;
}
int main()
{
int maxn = ;
scanf("%d", &n);
for (int i = ; i <= n; ++i){
scanf("%d%d%d", &c[i], &p[i], &L[i]);
maxn = max(maxn, c[i]);
}
for (int i = maxn;; ++i){
if (fun(i)){ printf("%d\n", i); return ; }
}
}

[Noi2002]Savage(欧几里得拓展)的更多相关文章

  1. NOIP2012拓展欧几里得

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

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

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

  3. bzoj1407 [Noi2002]Savage——扩展欧几里得

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...

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

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

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

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

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

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

  7. POJ1061 青蛙的约会-拓展欧几里得

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

  8. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

  9. poj2891 拓展欧几里得

    //Accepted 164 KB 16 ms //拓展欧几里得 //m=a1*x+b1 --(1) //m=a2*(-y)+b2 --(2) //->a1*x+a2*y=b2-b1 //由欧几 ...

随机推荐

  1. 一个复杂Json的解析

    { "website": { "1": { "basic": { "homepage": "http://py ...

  2. openCV 调用摄像头

    OpenCV调用摄像头 环境 python:python3.6 摄像头:网络摄像头 Python库:openCV # -*- coding: utf-8 -*- # @author leone # @ ...

  3. 【20】策略者模式(Strategy Pattern)

    一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的 ...

  4. SQL Server 基本UPDATE和DELETE语句

    1.UPDATA 基本UPDATE语法:(可以修改多行的列) 2.DELETE

  5. HDU6191(01字典树启发式合并)

    Query on A Tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Othe ...

  6. SSM 开发 Tars

    目录结构 tars生成的文件当成 controller 来调用 service ,service 调用 mapper POM 注意如果 mybatis是3.4.1 spring 是4.1.14的话, ...

  7. selenium win7+selenium2.0+python环境搭建

    win7+selenium2.0+python环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是python 2.7(selenium之 ...

  8. Android常用学习网站

    http://blog.csdn.net/liang5630/article/details/43482691 https://github.com/Trinea/android-open-proje ...

  9. linux网络 skb_buff

    sbk_buff中的data_len指的是尾部带的page数据的长度,len指的是总共的data的长度,len-data_len是第一个线性buf的数据长度. sk_buff->len:表示当前 ...

  10. Spark内存分配诊断

    1.JVM自带众多内存诊断的工具,例如:JMap,JConsole等,第三方IBM JVM Profile Tools等. 2.日志!在开发.测试.生产环境中最合适的就是日志,特别是Driver产生的 ...