BZOJ1407 NOI2002 Savage 【Exgcd】
BZOJ1407 NOI2002 Savage
Description
Input
第1行为一个整数N(1<=N<=15),即野人的数目。
第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。
(1<=Ci,Pi<=100, 0<=Li<=10^6 )
Output
仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。
Sample Input
3
1 3 4
2 7 3
3 2 1
Sample Output
6
//该样例对应于题目描述中的例子。
首先看到了M<=1e6,然后就可以暴力枚举M的值
然后确定了M的值之后,我们对于两个野人i和j可以列出
(Ci+x∗pi)−(Cj+x∗pj)=y∗M" role="presentation">(Ci+x∗pi)−(Cj+x∗pj)=y∗M(Ci+x∗pi)−(Cj+x∗pj)=y∗M
当x≤min(li,lj)" role="presentation">x≤min(li,lj)x≤min(li,lj)的时候就不成立(会相遇)
求出x的最小整数解判断一下就行了
#include<bits/stdc++.h>
using namespace std;
#define N 20
#define M 1000000
int n;
int c[N],p[N],l[N];
void exgcd(int a,int b,int &x,int &y){
if(!b)x=1,y=0;
else{
exgcd(b,a%b,y,x);
y-=(a/b)*x;
}
}
int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
bool judge(int i,int j,int s){
int anow=p[i]-p[j],bnow=s,cnow=c[j]-c[i];
int x,y,d=gcd(anow,bnow);
if(cnow%d)return 1;
exgcd(anow,bnow,x,y);
int w=abs(s/d);
x=((x*cnow/d)%w+w)%w;
if(x<=l[i]&&x<=l[j])return 0;
return 1;
}
bool check(int s){
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(!judge(i,j,s))return 0;
return 1;
}
int main(){
int down=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d%d%d",&c[i],&p[i],&l[i]),down=max(down,c[i]);
for(int i=down;i<=M;i++)
if(check(i)){printf("%d",i);return 0;}
return 0;
}
BZOJ1407 NOI2002 Savage 【Exgcd】的更多相关文章
- BZOJ1407 [Noi2002]Savage 【扩展欧几里得】
题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...
- 【exgcd】卡片
卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...
- 【数学 exgcd】bzoj1407: [Noi2002]Savage
exgcd解不定方程时候$abs()$不能乱加 Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...
- BZOJ1407: [Noi2002]Savage exgcd
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- bzoj 1407: [Noi2002]Savage【扩展欧几里得+中国剩余定理】
首先答案不会很大,所以枚举答案m,于是把问题转为了判定: 关于如何判定: 首先题目中虽然没说但是数据是按照初始洞穴编号排的序,所以并不用自己重新再排 假设当前答案为m,相遇时间为x,野人i和j,那么可 ...
- Codeforces1106F 【BSGS】【矩阵快速幂】【exgcd】
首先矩阵快速幂可以算出来第k项的指数,然后可以利用原根的性质,用bsgs和exgcd把答案解出来 #include<bits/stdc++.h> using namespace std; ...
- 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n\) 顺序杀掉 \(n\ ...
- 【9.2校内测试】【开学祭】【exgcd】【树规(背包】【模拟】
比较裸的$exgcd$的应用? $exgcd$可以算出在$x$和$y$分别是最小正整数时的解.注意在这里因为有$a(x+\frac{b}{d})+b(y-\frac{a}{d})=c$,$d=gcd( ...
- bzoj 1477: 青蛙的约会【exgcd】
列出式子是\( mx+s1\equiv nx+s2(mod L) (m-n)x+Ly=s2-s1 \),注意如果n-m<0的话,就把ac都乘-1变成正数,然后exgcd求解,最后注意x为负的话要 ...
随机推荐
- [嵌入式培训笔记]----Linux命令简介
Linux文件系统的结构类似一棵树,是从一个树根生长出来的.树根叫做/.从树根长出很多分叉,就这么一直生长下去.我们使用Linux操作系统的时候总是落在某个分叉上.ls命令可以帮助我们查看当前分叉上所 ...
- (3) iOS开发之UI处理-UIView篇
在UIView作为许多子控件的容器的时候,首先我们需要动态的计算出UIView下的所有子控件的高度,并布局排列好,然后我们还要把作为容器的UIView的高度调整到刚好包裹着所有子控件,不会过矮,也不会 ...
- pip 使用总结
pip的安装: Windows Python2.7 以上的版本均自带pip,安装的时候记得勾选对应的选项即可. 安装easy_install, 通过easy_install pip 下载[easy_s ...
- 1.spring cloud eureka server配置
IDEA版本 2017.2.5 JDK 1.8 红色加粗内容为修改部分 1.创建一个新项目 2.选择eureka依赖 3.版本选择(重要)并且更新依赖 <?xml version="1 ...
- C++:哈希
1.基本概念 哈希一般用来快速查找,通过hash函数将输入的键值(key)映射到某一个地址,然后就可以获得该地址的内容. 同样,如果要储存一对值(键值和数据),则也是通过hash函数获得地址来存入.见 ...
- 【2018多校第一场】hdu6308-Time Zone(日期)
Problem Description Chiaki often participates in international competitive programming contests. The ...
- poj3656
题解: 二分图最大匹配 根据三角形不等式 直接上最大匹配即可 注意编圈取相反数 代码: #include<iostream> #include<algorithm> #incl ...
- a的样式
.myAucCItem a { color: rgb(71,71,71);} .myAucCItem a:hover { color: rgb(71,71,71); text-decoration: ...
- Java Ioc详解和实现
作者:竹竿 这章我们讲Java Spring的Ioc控制反转, DI依赖注入. 阅读此文之前,必须深入理解Java反射原理. 1. Ioc控制反转 原来类对象实例的创建都是有程序员自己通过new进行的 ...
- Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
这里也会遇到一次性关闭所有modal引起阴影遮罩的问题,也就是所有modal都关闭了,但是主页面仍然被阴影遮罩. 这个问题从哪来的,是因为modal叠加,我们点击窗口之外的空白部分,一次性关闭所有mo ...