【数学 exgcd】bzoj1407: [Noi2002]Savage
exgcd解不定方程时候$abs()$不能乱加
Description

Input
Output
仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。
Sample Input
1 3 4
2 7 3
3 2 1
Sample Output
//该样例对应于题目描述中的例子。
题目分析
注意到$n$很小且保证$M≤10^6$,自然想到枚举答案对不对!其实枚举答案的复杂度是不对的但是就是可过(因为$n^2$的验证大多数情况达不到上界;出题人的本意大概也是枚举吧)
$O(M)$枚举答案之后考虑如何验证。两个野人当总洞穴数为$M'$时在有生之年相遇即$C_i+time*P_i≡C_j+time*P_j(modM')$,其中$time≤min\{L_i,L_j\}$。那么这个式子就可以展开后作为不定方程求解了。注意最后要将特解变化为最小正整数解。
这里要说的时,求解不定方程时,即使部分会出现负数情况,也不能够乱加$abs()$!因为符号的正负性在之后的方程中会被负负得正或保持符号。唯一要$abs()$的就是最后求最小正整数解时的变换。
哦这题枚举答案还要从$mx$开始,因为有部分情况会出现$M'<mx$在表达式上合法的情况。
#include<bits/stdc++.h> int n,c[],p[],l[],mx; void exgcd(int a, int b, int &x, int &y)
{
if (b==){
x = , y = ;
return;
}
exgcd(b, a%b, y, x);
y -= a/b*x;
}
int gcd(int x, int y){return y==?x:gcd(y, x%y);}
int abs(int x){return x>?x:-x;}
bool able(int ts)
{
register int i,j,ci,cj,pi,pj,lt,d,mt;
for (i=; i<=n; i++)
for (j=i+; j<=n; j++)
{
int x,y;
ci = c[i], cj = c[j], pi = p[i], pj = p[j], lt = std::min(l[i], l[j]);
d = gcd(pi-pj, ts);
if ((cj-ci)%d) continue;
exgcd(pi-pj, ts, x, y);
mt = abs(ts/d), x = ((x*(cj-ci)/d)%mt+mt)%mt;
if (x <= lt) return ;
}
return ;
}
int main()
{
scanf("%d",&n);
for (int i=; i<=n; i++) scanf("%d%d%d",&c[i],&p[i],&l[i]), mx = mx>c[i]?mx:c[i];
for (int m=mx; m<=; m++)
if (able(m)){
printf("%d\n",m);
return ;
}
return ;
}
END
【数学 exgcd】bzoj1407: [Noi2002]Savage的更多相关文章
- BZOJ1407 NOI2002 Savage 【Exgcd】
BZOJ1407 NOI2002 Savage 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表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- BZOJ1407 [Noi2002]Savage 【扩展欧几里得】
题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...
- bzoj1407 [Noi2002]Savage——扩展欧几里得
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...
- [BZOJ1407][NOI2002]Savage(扩展欧几里德)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1407 分析: m,n范围都不大,所以可以考虑枚举 先枚举m,然后判定某个m行不行 某个 ...
- BZOJ1407 [Noi2002]Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- [Noi2002]Savage
[Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd ...
- [Noi2002]Savage 题解
[Noi2002]Savage 时间限制: 5 Sec 内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci ...
- BZOJ 1407: [Noi2002]Savage( 数论 )
枚举答案, 然后O(N^2)枚举野人去判他们是否会在有生之年存在同山洞. 具体做法就是: 设第x年相遇, 则 Ci+x*Pi=Cj+x*Pj (mod M), 然后解同余方程. 复杂度应该是O(ans ...
随机推荐
- 在mpvue框架中使用Vant WeappUI组件库的注意事项
1如何引入组件库 有两种方法 1 npm下载 2 下载代码,下面介绍第二种方法. 在gitHub上, 链接如下 https://github.com/youzan/vant-weapp 首先在自己项目 ...
- c3p0连接池下载
- Cstring的使用
https://msdn.microsoft.com/zh-cn/aa315043 1.字符串提取函数,CString::Left.CString::Mid .CString::Right CStri ...
- ZROI 部分题目题解
ZROI 部分题目题解 335 首先发现一个性质: 对于最短的边而言,所有点的路径如果经过了这条边,那么路径的权值就是这条边的边权(废话) 那么我们把最短的边拎出来,可以发现,博物馆确定时,每个点按照 ...
- Codeforces Round #546 (Div. 2) A. Nastya Is Reading a Book
链接:https://codeforces.com/contest/1136/problem/A 题意: 给n个区间,每个区间范围不超过100,n不超过100. 给一个位置k,1-(k-1)是遍历过的 ...
- Java三种技术架构
http://blog.csdn.net/weixin_36416990/article/details/52845868
- Springboot日志配置探索(主要看logback)(一)
这篇博客是springboot日志配置探索的第一篇,主要讲默认配置下springboot的logback日志框架的配置(即直接使用是怎样的) 首先,是一个SpringBoot的有关日志的说明文档:ht ...
- Unity Shader入门精要学习笔记 - 第4章 学习 Shader 所需的数学基础
摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐 ...
- Access denied for user ''@'localhost' to database 的一个问题
$conn = new mysqli("127.0.0.1", 'abc', '', DB_DATABASE); 在提供了用户名的情况下,竟然返回错误 说用户提供的用户为空,非常奇 ...
- arcgis【0基础 】【1】 中如何添加MXD
1,第一种方法 MapControl 直接添加 if (!axMapControl1.CheckMxFile(FileName)) { MessageBox.Show("文件不合法&quo ...