[Noi2002]Savage(欧几里得拓展)
题意:在一个岛上,有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(欧几里得拓展)的更多相关文章
- NOIP2012拓展欧几里得
拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...
- BZOJ-1407 Savage 枚举+拓展欧几里得(+中国剩余定理??)
zky学长实力ACM赛制测试,和 大新闻(YveH) 和 华莱士(hjxcpg) 组队...2h 10T,开始 分工我搞A,大新闻B,华莱士C,于是开搞: 然而第一题巨鬼畜,想了40min发现似乎不可 ...
- bzoj1407 [Noi2002]Savage——扩展欧几里得
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...
- poj 1061 青蛙的约会 拓展欧几里得模板
// poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...
- bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得
这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...
- POJ 2891 Strange Way to Express Integers(拓展欧几里得)
Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...
- POJ1061 青蛙的约会-拓展欧几里得
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- poj2891 拓展欧几里得
//Accepted 164 KB 16 ms //拓展欧几里得 //m=a1*x+b1 --(1) //m=a2*(-y)+b2 --(2) //->a1*x+a2*y=b2-b1 //由欧几 ...
随机推荐
- Linux 下 rt3070 无线网卡找不到 firmware 问题
解决办法: 下载好固件 rt2800.bin 文件,复制到 /lib/firmware 中 如果完成以上步骤后,运行 ifconfig wlan0 up 仍然提示 phy0 -> rt2x00l ...
- [转]Angular CLI 安装和使用
本文转自:https://www.jianshu.com/p/327d88284abb 一. 背景介绍: 两个概念: 关于Angular版本,Angular官方已经统一命名Angular 1.x统称为 ...
- 哆啦A梦欺骗了你!浏览器CSS3测试遭质疑
首先,说明,此处只是告诫各位参与CSS3.0学习使用或者将要使用或者学习CSS3.0的朋友,不要完全信任网络资源,依靠网络资源,我们需要利用网络资源的方便和可取的部分,结合自己的理解,学好,理解好! ...
- ajax读取txt文本时乱码的解决方案
前言:第一次学习使用 ajax 就是用来读取文本 先给出现乱码的代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- Hadoop专有名词
Hadoop专有名词 一. HDFS 二. MapReduce 1.MRAppMaster:MapReduce Application Master 负责整个过程调度和协调的 2.MapTask:在M ...
- HTTP 错误 500 调用loadlibraryex失败
HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Frame ...
- c++类构造函数详解
//一. 构造函数是干什么的 /* 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译 ...
- 精选20道Java代码笔试题
1.运算符优先级问题,下面代码的结果是多少? public class Test { public static void main(String[] args) { int k = 0; int r ...
- Python全栈学习_day002知识点
今日大纲: . while循环 . 格式化输出 . 运算符 . 编码初识 1. while循环 - while 无限循环: while True: # 死循环 print('大悲咒') print(' ...
- Python 3.4:Chromedrive,IEDriverServer,geckoDriver
import sys; import time; import os; #from huoche import PythonTickt; from splinter.browser import Br ...