bzoj 1407: [Noi2002]Savage】的更多相关文章

枚举答案, 然后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的…
Description 解题报告: 因为给定答案范围,暴力枚举时间,然后再两两枚举野人,判断是否有可能在某一年相遇,我们设这一年为\(x\),那么显然相交的条件是: \(x*(p[i]-p[j])+y*M=s[j]-s[i]\) 扩展欧几里得求得 \(x\) 的最小正整数解,判断这个线性方程的解是否存在且在他们寿命期内即可 #include <algorithm> #include <iostream> #include <cstdlib> #include <c…
首先答案不会很大,所以枚举答案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…
其实答案远不到1e6 所以可以枚举! 设答案是m 那\(i,j\)的相遇就可以表示成\(P_ix+C_i=P_jx+C_j+ym\) 移向就是\((P_i-P_j)x-ym=C_j-C_i\) 套扩展欧几里得定理 如果\(C_j-C_i\mod gcd\ !=0\)说明不会相遇 否则的话求一下第一次相遇时间,如果大于一个的寿命也不会相遇 #include<iostream> #include<cstdio> #include<cstring> #include<a…
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 Samp…
[Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd(int a,int b,int &x,int &y){ if(!b){x=1,y=0;return a;} int ans=exgcd(b,a%b,x,y),t=x; x=y,y=t-a/b*y; return ans; } int max(int a,int b){return a>…
[Noi2002]Savage 时间限制: 5 Sec  内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值. (1<=Ci,Pi<=100, 0<=Li<=10^6 ) 输出 仅包含一个数M,即最少可能的山洞数.输入数据保证有解,且M不大于10^6. 样例输入 3 1 3 4 2 7 3 3 2 1 样例输出 6 //…
我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 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 //该样例对应于题目描述…