洛谷 P2421 [NOI2002]荒岛野人】的更多相关文章

洛谷P2421:https://www.luogu.org/problemnew/show/P2421 思路 从洞的最大编号开始增大枚举答案 对于每一个枚举的ans要满足Ci+k*Pi≡Cj+k*Pj(mod ans)的k ,都要k>min(L[i],L[j])  因为这个ans一定要满足在一个野人死之前可以满足条件 根据上式可以推出Ci+k*Pi=Cj+k*Pj+m*ans   移项得k*(Pi-Pj)+m*ans=Cj-Ci 即可用Exgcd求解此式子 代码 #include<iostre…
题目背景 原 A-B数对(增强版)参见P1102 题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来. 每个野人i有一个寿命值Li,即生存的年数. 下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况.三个野人初始的洞穴编号依次为1,2,3:每年要走过的洞穴数依次为3,7,2:寿命值依次为4,3,1. 奇怪的是,虽然野人有很多,…
题目描述 又是一道扩欧的题. 要求一个最小的m使得 Ci+Pi*x≡Cj+Pj*x mod m(i!=j) 在x在第i个人和第j个人的有生之年无解. 也就是 (Pi-Pj)*x+m*y=Cj-Ci 在min(Li,Lj)上无解. 题目限制了保证有解且m<=1e6,那么可以考虑枚举m,在暴力地对每个人进行判断. 理论最差复杂度为1e6*n^2^log,但实际上远达不到这种情况. 需要注意的是m必须大于等于max(Ci). #include<complex> #include<cstd…
题目大意: 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来. 每个野人i有一个寿命值Li,即生存的年数. 奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇.他们想知道,至少有多少个山洞,才能维持岛上的和平呢? 输入输出格式 输入格式: 第1行为一个整数N(1<=N<=15…
洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数解 \(0<x\neq y\leq 2\cdot 10^9,0<n,m\leq 2\cdot 10^9,0<l\leq 2.1\cdot 10^9\) 做一下变形: \[x-y\equiv a(n-m) \pmod l \] 设\(w=x-y,r=n-m\),则 \[ar\equiv w \…
P2421 [NOI2002]荒岛野人 洞穴数不超过1e6 ---> 枚举 判断每个野人两两之间是否发生冲突:exgcd 假设有$m$个洞穴,某两人(设为1,2)在$t$时刻发生冲突 那么我们可以列出方程 $c_{1}+p_{1}t\equiv c_{2}+p_{2}t (mod\quad m)$ 移项一下:$(p_{1}-p_{2})t\equiv c_{2}-c_{1} (mod\quad m)$ 去掉$(mod m)$,得$(p_{1}-p_{2})t-mx=c_{2}-c_{1} $ 这…
最近上课时提到的一道扩欧水题.还是很可做的. 我们首先注意到,如果一个数\(s\)是符合要求的,那么那些比它大(or 小)的数不一定符合要求. 因此说,答案没有单调性,因此不能二分. 然后题目中也提到\(s\le 10^6\),因此我们直接从小到大枚举\(s\),然后考虑如何判断. 由于两个野人在有生之年不会相遇,因此只有两种情况: 这两个野人永远不会相遇. 这两个野人相遇的时候他们其中的一个(或两个)已经死了. 在处理的时候我们把\(c_i\)都减\(1\)方便处理. 我们接着枚举两个人\(i…
传送门 答案不大于 $10^6$,考虑枚举答案 对于枚举的 ans,必须满足对于任意 i,j(i≠j) 都有 使式子$c_i+kp_i \equiv c_j+kp_j\ (mod\ ans)$成立的最小的 k > min( L [ i ] , L [ j ] ) 考虑如何求出式子中最小的 k 转化一下,变成$kp_i-kp_j+c_i-c_j=t\cdot ans$ 整理一下得 $k(p_i-p_j)-t\cdot ans=c_i-c_j$ 显然可以 exgcd 求 k 复杂度最高为 $O(MN…
Code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int N; struct Node{ ll C,P,L; }nodes[20]; ll abss(ll a){return a<0?-a:a;} ll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){x=1,y=…
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就应运而生了. 2.例题与思路 这里通过例题 洛谷P1196 [NOI2002] 银河英雄传说 来介绍边带权并查集的思想.题面请点击链接查看. 2.1.暴力 拿到这道题我的第一想法就是用链表模拟.对于两艘在同一列的战舰,只需知道它们到队首的距离(设距离分别为 \(dis_1\) 和 \(dis_2\))就可以知…