[Noi2002]Savage 题解
[Noi2002]Savage
时间限制: 5 Sec 内存限制: 64 MB
题目描述

输入
输出
仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。
样例输入
3
1 3 4
2 7 3
3 2 1
样例输出
6
//该样例对应于题目描述中的例子。
这道题明眼人都能看得出来是扩展欧几里得,然而怎么搞就是一个问题了,如果对扩展欧几里得不是太熟可以先做一下 青蛙的约会 裸题,但要注意一下你的模板必须正确,否则像本博主这样的蒟蒻调半天才发现模板有错就崩了。(本博主扩展欧几里得的板子来自Q某犇,据Q某犇说他也是找了好久才发现神利.代目学长写正确模板,其余好多都是错误的)
首先我们完全可以把青蛙那道题的主要代码都搬过来,由于这道题并不符合单调性,想二分的同学就扑街了,我也是其中之一。
由于n很小m最大不过1000,000我们从小到大挨个枚举就好了,时间复杂度最坏就是n^2*log(max(c[i]))*1000000,反正时间有5秒,而且这只是最坏复杂度,所以貌似是可以的。然后就简单了,两个野人相遇的条件是他们能相遇且两人都存活,因此我们只要算出他们两个相遇的时间是否比他们中寿命最短的那个长就行了。
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<string>
#include<cmath>
using namespace std;
int n,c[],p[],l[];
int exgcd(int a,int b,int &x,int &y){
if(b==)
{
x=;
y=;
return a;
}
int t=exgcd(b,a%b,x,y);
int o=x;
x=y;
y=o-a/b*y;
return t;
}
bool check2(int a,int b,int L){
int x,y;
int gcd=exgcd(p[a]-p[b],L,x,y);
if(((c[b]-c[a])%gcd)!=)
return ;
int aa=p[a]-p[b],bb=L;
aa/=gcd,bb/=gcd;
exgcd(aa,bb,x,y);
bb=abs(bb);
x=x*(c[b]-c[a])/gcd;
x%=bb;
if(x<) x+=bb;
if(x>min(l[a],l[b])) return ;
return ;
}
bool check1(int L){
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
if(!check2(i,j,L))
{
return ;
}
}
}
return ;
}
int main(){
// freopen("savage.in","r",stdin);
// freopen("savage.out","w",stdout);
scanf("%d",&n);
int st=;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&c[i],&p[i],&l[i]);
st=max(st,c[i]);
}
int ans=;
for(int i=st;;i++)
{
if(check1(i))
{
ans=i;
break;
}
}
printf("%d\n",ans);
// while(1);
return ;
}
[Noi2002]Savage 题解的更多相关文章
- [Noi2002]Savage
[Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd ...
- BZOJ 1407: [Noi2002]Savage( 数论 )
枚举答案, 然后O(N^2)枚举野人去判他们是否会在有生之年存在同山洞. 具体做法就是: 设第x年相遇, 则 Ci+x*Pi=Cj+x*Pj (mod M), 然后解同余方程. 复杂度应该是O(ans ...
- BZOJ1407 NOI2002 Savage 【Exgcd】
BZOJ1407 NOI2002 Savage Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...
- 【扩展欧几里得】Bzoj 1407: [Noi2002]Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目.第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0 ...
- BZOJ1407 [Noi2002]Savage 【扩展欧几里得】
题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...
- 【BZOJ 1407】[Noi2002]Savage ExGCD
我bitset+二分未遂后就来用ExGCD了,然而这道题的时间复杂度还真是玄学...... 我们枚举m然后对每一对用ExGCD判解,我们只要满足在最小的一方死亡之前无解就可以了,对于怎么用,就是ax+ ...
- [BZOJ1407][NOI2002]Savage(扩展欧几里德)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1407 分析: m,n范围都不大,所以可以考虑枚举 先枚举m,然后判定某个m行不行 某个 ...
- 【bzoj1407】 Noi2002—Savage
http://www.lydsy.com/JudgeOnline/problem.php?id=1407 (题目链接) 题意 有n个原始人他们一开始分别住在第c[i]个山洞中,每过一年他们都会迁往第( ...
- BZOJ1407 [Noi2002]Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
随机推荐
- UWP入门(三) -- StackPanel与Grid的区别
原文:UWP入门(三) -- StackPanel与Grid的区别 ##1.Grid 下布局 <Grid Background="{ThemeResource ApplicationP ...
- .NET错误提示之:无法更新EntitySet“TableName”因为它有一个DefiningQuery
使用LINQ 进行提交数据时发生的错误提示 原因:提交的对象表 没有设主键.
- Visual studio调试Web发生未能正常启动IIS express
今天调试web时,不知道怎么搞的,昨天还好好的,结果今天怎么也没法调试了.VS里报的错误是进程号为**的未能正常启动,看了下调试时IIS压根就没启动起来,没关系,看看事件管理器里发生了什么 找到个最关 ...
- 在Window和Linux下使用Zthread库(跨平台高级面向对象的线性和sycnchronization 库)
ZThread库是一个开源的跨平台高级面向对象的线性和sycnchronization 库,以运行POSIX 和Win32 系统中的C++程序. ZThread库的主页:http://zthread. ...
- “流”的5个例子(TStream是抽象类,写到文件里和内存里,都是一样的)
http://www.cnblogs.com/keyvip/category/270215.html
- QSqlQueryModel 居然默认是只读的!
The model is read-only by default. To make it read-write, you must subclass it and reimplement setDa ...
- 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)
作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...
- 虚拟机安装 ubuntu 后,更新源无效,以及无法联网安装软件的问题
问题: 虚拟机安装 ubuntu 后,更新源无效,以及无法联网安装软件: 错误提示: Err http://security.ubuntu.com/ubuntu/ trusty-security/un ...
- Java实现Qt的SIGNAL-SLOT机制(保存到Map中,从而将它们关联起来,收到信号进行解析,最后反射调用)
SIGNAL-SLOT是Qt的一大特色,使用起来十分方便.在传统的AWT和Swing编程中,我们都是为要在 监听的对象上添加Listener监听器.被监听对象中保存有Listener的列表,当相关事件 ...
- C++ Builder 控件的卸载
控件卸载: 1.选择 BCB 菜单 File→Close All (关闭所有文件) 选择BCB 菜单: Project→Options→Packages 在 ...