[BZOJ 1407] Savage】的更多相关文章

Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 Solution: 由于此题里n的范围很小,因此可以直接从小到大枚举m 那么问题转化为一个判定型问题:已知m,求是否会发生冲突 由于$O(m \cdot n^2)$的复杂度符合要求,枚举每一对(i,j)是否会发生冲突即可 可将问题转化为求同余式中最小的x \[(step_i-step_j)x\equiv pos_j-pos_i(\mod m)\] 接下来就是数论里的套路了: $a…
这题的时间复杂度真玄学... O(m*n^2).1e8也能过啊... 首先题目保证m<=1e6. 这启发我们枚举或者二分答案? 但是答案不满足单调性,考虑从小到大枚举m. 对于每一个m,枚举两个野人在有生之年能否住在一起.可以推出一个同余方程,用扩欧可以求出最小整数解x,或者没有解. 如果x<=life[i]&&x<=life[j]那么当然不满足条件. # include <cstdio> # include <cstring> # include…
枚举答案, 然后O(N^2)枚举野人去判他们是否会在有生之年存在同山洞. 具体做法就是: 设第x年相遇, 则 Ci+x*Pi=Cj+x*Pj (mod M), 然后解同余方程. 复杂度应该是O(ans*N^2log(ans)), 但是实际远小于....能够AC -------------------------------------------------------------------- #include<cstdio> #include<algorithm> #inclu…
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目.第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值. Output 仅包含一个数M,即最少可能的山洞数.输入数据保证有解,且M不大于106. 看到这题,我们想到了bzoj 1477 青蛙的约会. 但是我们发现l的值不确定..所以我们使用枚举大发.. 直接从scanf的…
我bitset+二分未遂后就来用ExGCD了,然而这道题的时间复杂度还真是玄学...... 我们枚举m然后对每一对用ExGCD判解,我们只要满足在最小的一方死亡之前无解就可以了,对于怎么用,就是ax+by=c,在这里c是距离差,a是速度差,b是m,x是我们要的解,y随意. 时间复杂度O(m*n*n*log),然而这是标解.......... #include <cstdio> ][],len,n,c[],p[],l[],S; inline int Min(int x,int y){ retur…
Description 解题报告: 因为给定答案范围,暴力枚举时间,然后再两两枚举野人,判断是否有可能在某一年相遇,我们设这一年为\(x\),那么显然相交的条件是: \(x*(p[i]-p[j])+y*M=s[j]-s[i]\) 扩展欧几里得求得 \(x\) 的最小正整数解,判断这个线性方程的解是否存在且在他们寿命期内即可 #include <algorithm> #include <iostream> #include <cstdlib> #include <c…
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,于是把问题转为了判定: 关于如何判定: 首先题目中虽然没说但是数据是按照初始洞穴编号排的序,所以并不用自己重新再排 假设当前答案为m,相遇时间为x,野人i和j,那么可以列出同余式: \[ x(p[i]-p[j])\equiv c[j]-c[i](mod\ m) \] \[ x(p[i]-p[j])+ym=c[j]-c[i] \] 于是可解exgcd.由于并不是互质的,所以最后的算天数需要m/d #include<cstdio> using namespace…
枚举m,n^2判断 对于野人i,j,(H[i]+x*S[i])%m==(H[j]+x*S[j])%m,且x<=O[i]&&x<=O[j],他们才有可能相遇 化简得:(S[i]-S[j])*x+y*m=C[j]-C[i],扩欧解x最小值,判断 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath>…
思路:枚举洞穴个数,用扩展欧几里德暴力判断没两个人的周期. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> using namespace std; + ; ; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3…