[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 //由欧几 ...
随机推荐
- HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例
一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...
- AutoIt介绍
AutoIt的下载网址: https://www.autoitscript.com/site/autoit/downloads/ AutoIt在线文档:http://www.autoit3.cn/Do ...
- Vue 动态加载组件
为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...
- Ubuntu安装SSH SERVER
apt-get update apt-get install openssh-server 安装好后查看SSH是否启动 打开”终端窗口”,输入”sudo ps -e |grep ssh“–>回车 ...
- Java集合框架——jdk 1.8 ArrayList 源码解析
前言:作为菜鸟,需要经常回头巩固一下基础知识,今天看看 jdk 1.8 的源码,这里记录 ArrayList 的实现. 一.简介 ArrayList 是有序的集合: 底层采用数组实现对数据的增删查改: ...
- inheritCombinedParasitic.js
// 寄生组合式继承 // 其基本思路是通过借用构造函数来继承属性,通过原型链的混成形式来继承方法,就是为了不必为了子类型的原型去调用父类型的构造函数 function inheritPrototyp ...
- Python 再谈变量作用域与变量引用
再谈变量作用域与变量引用 by:授客 QQ:1033553122 module3.py #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...
- const修饰指针的三种效果
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...
- MySQL写入用户微信名
很简单的需求,将用户微信名写入MySQl即可,但是测试过程中却遇到了问题,微信名中的emoji写入数据库失败.解决步骤如下 1.了解utf8mb4 MySQL从5.5.3版本开始支持utf8mb4编码 ...
- Maven 安装 on centos7
本文演示如何在CentOS7上安装maven. 1 准备工作 1.1 进入官网下载栏目 http://maven.apache.org/download.cgi 找到下载列表中 Binary tar. ...