[洛谷P4774] [NOI2018]屠龙勇士】的更多相关文章

洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{*})\)后龙的血量恰好为\(0\).那么根据题意我们可以列出方程: \[atk_i*x\equiv hp_i(mod \ p_i)\] 这个形式是不是很像中国剩余定理的形式:\(x\equiv b_i(mod \ a_i)\). 事实上我们可以直接将这个方程看做一个同余方程,即\[atk_i*x+p…
链接:P4774 前言: 交了18遍最后发现是多组数据没清空/ll 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前驱时,最小值即为后继),和插入,删除操作,所以想到平衡树维护每条龙的剑的攻击力,记为b[i].建议使用非旋treap,非常之好写. 根据题目描述,a[i]为每条龙生命值,p[i]为每条龙回复量.发现能够击杀这条龙的条件可以列成一个方程: \(xb[i]-yp[i]=a[i]\) \(x\) 为攻击次…
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个同余方程合并,具体会在下面提到. 但是,使用仍有限制,那就是\(x\)的系数必须为\(1\). 没关系,把它再扩展一下 题目及实现 洛谷题目传送门 题意分析 显然,如果我们能干掉所有龙,那么每一次使用的剑的攻击力是已知的,设为\(k\).那么对于每一条龙,攻击次数\(x\)必须满足\(kx\equi…
传送门 思路 首先可以发现打每条龙的攻击值显然是可以提前算出来的,拿multiset模拟一下即可. 一般情况 可以搞出这么一些式子: \[ atk_i\times x=a_i(\text{mod}\ p_i) \] 简单处理一下就变成这样: \[ atk_i\times x +p_i \times y=a_i \] 显然可以扩欧搞出一组特解\((x',y')\),那么就有 \[ x=x'(\text{mod}\ \frac{p_i}{\gcd(atk_i,a_i)}) \] 然后扩展中国剩余定理…
P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) 求出一个满足条件的\(x_0\),通解是\(x=x_0+k*\text{gcd}(t,p[i])\) 就是\(x \equiv x_0 (\text{mod }\text{gcd}(t,p[i]))\) 然后就有n个这样的式子,用excrt,合并方程 excrt懒得写了 // luogu-judg…
传送门 这题真的是送温暖啊qwq,而且最重要的是yyb巨佬在Day2前几天正好学了crt,还写了博客 然而我都没仔细看,结果我就同步赛打铁了QAQ 我们可以先根据题意,使用set维护,求出每次的攻击力 然后对于一条龙,要使得砍到生命值能加到0,那么 攻击力\(a_i\) * 次数\(x\) 要和 血量\(b_i\) 在膜 回复量\(p_i\) 意义下同余,也就是\(a_ix\equiv b_i\mod p_i\) 然后就是n个这样的方程,求最小的x 首先对于每个方程,考虑转化成\(x\equiv…
题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一直回复$p_{i}$的血量,只有在攻击后会回血),杀死一条龙当且仅当攻击结束后或回复血量之后血量为$0$,杀死一条龙会获得一个新的武器.现在要求对每条龙攻击固定次数$x$求出最小的$x$,使所有龙都能被杀死. 因为每次选择的武器是固定的,所以只要用$multiset$存当前剩下的武器然后每次按题目规…
BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt Description www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf 每次用哪吧剑显然用个set就搞定了. 对于每头龙,生命值ai,回血pi,剑的攻击力为atk,打的次数为ans. 显然有ans*atk-ai>=0&&pi|ans*atk-ai. ans*atk+pi*y=ai (y<=0). 要求y<=0的前提下ans尽量的小,是一个ax+by=n…
[NOI2018]屠龙勇士 描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 1∼n 顺序杀掉 n 条巨龙,每条巨龙拥有一个初始的生命值 ai .同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每次增加 pi,直至生命值非负.只有在攻击结束后且当生命值恰好为 0 时它才会死去. 游戏开始时玩家拥有 m 把攻击力已知的剑,每次面对巨龙时,玩家只能选择一把剑,当杀死巨龙后这把剑就会消失,但作为奖励,玩家会获得全新的一把剑. 小 D 觉得这款游戏十分无聊,但…
题目链接: 洛谷 BZOJ LOJ 题目大意:这么长的题面,就饶了我吧emmm 这题第一眼看上去没法列出同余方程组.为什么?好像不知道用哪把剑杀哪条龙…… 仔细一看,要按顺序杀龙,所以获得的剑出现的顺序也是固定的. 那么如果能把所有龙杀死,就能模拟出哪把剑杀那条龙了. (以下设所有除 $n,m$ 外的数的最大值为 $v$) $O(nm)$? 不,发现这里用剑的限制实际上是给出一个上界,来用lower_bound的. 插入也不要太暴力.我们想到什么?手写平衡树multiset! 这一部分复杂度是…
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并且他有一部车,车只能在海拔高度大于降水量的道路上行驶,如果某一条边的海拔高度小于等于降水量,那么小\(Y\)就必须下车步行,现在有\(q\)次询问,每次询问从目标点到\(1\)要步行的最短距离.强制在线. 题解: 这题我采用的做法是kruskal重构树. 可能大家对kruskal重构树并不是很熟悉,…
题目链接 LOJ 洛谷 rank前3无压力(话说rank1特判打表有意思么) \(x*atk[i] - y*p[i] = hp[i]\) 对于每条龙可以求一个满足条件的\(x_0\),然后得到其通解\(x[i] = x_0 + p[i]/gcd*k\). 怎么合并所有龙的通解?可以直接写成 \(Ans\equiv x_0(mod\ p[i]/gcd)\),用扩展中国剩余定理合并即可. 所有\(p[i]=1\)时要特判.(为啥呢...反正我知道它不对...) 所有\(p[i]=hp[i]\)时同余…
洛谷 361行代码的由来 数据分治大发好啊- NOI的签到题,可怜我在家打了一下午才搞了80分. 正解应该是kruskal重构树或排序+可持久化并查集. 我就分点来讲暴力80分做法吧(毕竟正解我也没太懂)- 前6个点 这6个点有两种做法: 法1:最短路. 这6个点都是离线的,而且只有一种海拔,所以直接最短路. 跑完之后,直接判断海拔与水位,输出即可. 不过这些分也并不好拿,spfa会被卡,要用堆优化dijkstra. 法2:离线排序+并查集. 其实这个暴力思想就是正解思想了,很好想到的. 首先跑…
QWQ 一到假期就颓废 哎 今年新鲜出炉的NOI题,QwQ同步赛的时候写的,后来交了一发洛谷,竟然过了 首先 根据题目,我们很容易得到,假设对应每一条龙的剑的攻击力是\(atk\)的话 \[a_i-x\times atk + k *p_i = 0 \] \[x\times atk = a_i \pmod {p_i} \] QwQ一看到这个式子,就想到了扩展crt求解. 不过我一开始的想法是,根据扩欧,求$a_i-x\times atk + k *p_i = 0 \(中的每一个\)x$的通解表达式…
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n​\) 顺序杀掉 \(n​\) 条巨龙,每条巨龙拥有一个初始的生命值 \(a_i​\).同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每次增加 \(p_i​\),直至生命值非负.只有在攻击结束后且当生命值恰好为 \(0​\) 时它才会死去. 游戏开始时玩家拥有 \(m\) 把攻击力已知的剑,每次面对巨龙时,玩家只…
啊我死了. 肝了三天的毒瘤题......他们考场怎么A的啊. 大意: 给你若干个形如 的方程组,求最小整数解. 嗯......exCRT的变式. 考虑把前面的系数化掉: 然后就是exCRT板子了. 我TM想要自己写出一个板子,然后GG了...... 我快疯了. 然后抄了板子(滑稽) 注意细节,快速幂/乘的时候,b位置不要传负数. #include <cstdio> #include <set> #include <algorithm> typedef long long…
真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即攻击\(x\)次.设对于第\(i\)条龙,攻击时使用的剑的攻击力为\(us_i\),生命值为\(hp_i\),恢复能力为\(rh_i\),则\(us_ix\equiv hp_i\pmod{rh_i}\).然后仔细阅读数据范围和提示,会发现存在\(hp_i>rh_i\)的情况,此时\(rh_i=1\)…
传送门 思路 按照套路,直接上后缀自动机. 部分分:\(l=1,r=|S|\) 首先把\(S\)和\(T\)的后缀自动机都建出来. 考虑枚举\(T\)中的右端点\(r\),查询以\(r\)结尾的串最长可以往左延伸多长,使得它仍然是\(S\)的子串.记该长度为\(lim_r\). \(lim_r\)可以在\(SAM_S\)中瞎跳跳出来. 那么答案即为 \[ \sum_{i=2}^{cnt} \max(0,len_i-\max(len_{fa_i},lim_{pos_i})) \] 其中\(i\)是…
题目描述 题解 考虑增量法. 假设我们已经做完了前k个条件,前面的模数连乘起来的结果为M,答案为X,当前的攻击力为x,龙的血量为a. 那么我们这一次的答案的表达形式是X+t*M的. 这一次需要满足的是x(X+t*M)≡a(%p). 只有t一个未知量,用exgcd就可以解了. 然后就是恶心的特判了... 代码 #include<iostream> #include<cstdio> #include<set> #include<cmath> #define N…
题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重构树 我们按边权的海拔从大到小排序,建出Kruskal重构树 这一定是一个小根堆 那么一个点的子树内的节点一定可以相互到达且经过的最小的海拔为该点权值 那么每次查询的时候,我们只需要倍增的处理出从这个点向上走多少才不能满足条件 然后在子树内查每个点到$1$的最大值即可. 哎,调了一上午也没调出来,只…
好久没写了,写一篇凑个数. 题目分析: 这题不难想,讲一下中国剩余定理怎么扩展. 考虑$$\left\{\begin{matrix}x \equiv a\pmod{b}\\ x \equiv c\pmod{d}\end{matrix}\right.$$ 不难发现需要满足$gcd(b,d)|(c-a)$才有解. 结合后的模数一定是$lcm(b,d)$.然后扩展gcd合并就行了. 中间过程会超过$10^18$,需要快速乘. 代码: #include<bits/stdc++.h> using nam…
传送门 原来NOI也会出裸题啊-- 用multiset求出对付每一个BOSS使用的武器威力\(ATK_i\),可以得到\(m\)个式子\(ATK_ix \equiv a_i \mod p_i\) 看起来可以直接魔改式子了-- 等一下!如果\(a_i > p_i\),\(ATK_ix<a_i\)没把BOSS打死怎么办QAQ 看数据范围,没有特性1(\(a_i \leq p_i\))的点似乎\(p_i=1\)?那不只要保证攻击次数能够把所有BOSS血量打到\(\leq 0\)就行了,,,于是这个顾…
闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集Debug到13:20过了前4个样例,然后第5个T飞了. FST? ...... FST! 完美收获50分暴力分. 原来是按秩合并那里咕咕了. 从50到100的蜕变,只需一行,你值的拥有. 思路 不会kruscal重构树 容易发现,假设我们确定了水位线,那么就确定了图中有哪些边是连通的.这时候的答案该…
显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod pi)方程组.没有保证模数互质,于是excrt一发.excrt实际上就是不停exgcd合并两个方程. 这次是重开这题,调了半天还是一堆-1觉得这个题可能是搞不会了,最后才发现某个地方没开long long. #include<iostream> #include<cstdio> #i…
Description Input Output Sample Input 23 33 5 74 6 107 3 91 9 10003 23 5 64 8 71 1 11 1 Sample Output 59-1 Solution 当时同步赛的时候写出来了……只不过忘了是爆$long~long$还是小细节写爆了只有$75$…… 当时蠢的一比直接强上了一颗$splay$强行增加码量……现在觉得当时太蠢了然后就重写了一遍…… 首先对于这个题,每次使用的剑可以发现是固定的,这个可以使用$set$来求出…
www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf Solution 将攻击的式子列出来,\(atk \times x-p \times y=a_i\) 这不就是个扩欧的裸式子嘛,求出 \(x\) 的解的式子 \(x=x_0+r \times dis\),其中 \(r\) 为任意整数,\(dis\) 为不定方程解的间隔 上面的式子发现又是一个同余方程 对于每一条龙都是一个同余方程,那么就是要解一个同余方程组的最小解 用扩展CRT就好了 #includ…
发现好像都是化掉系数之后套上\(ExCrt\)的板子 这好像是一个真正的扩展扩展中国剩余定理 我们要处理的方程是这样的形式 \[c_ix\equiv b_i(mod\ a_i)\] 其中\(c\)用一个\(std::multiset\)处理就好了 好像不是普通\(excrt\)可以处理的形式啊 思考一下这个方程的本质是什么,\(c_ix=k_ia_i+b_i\) 所以如果我们有两个方程 \[c_1x\equiv b_1(mod\ a_1)\] \[c_2x\equiv b_2(mod\ a_2)…
题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时候感觉掌握的并不熟,还是需要参照别人的题解,不过至少现在对可持久化的理解更深了一步,而且终于这题给调对了. Code: //It is made by HolseLee on 23rd Aug 2018 //Luogu.org 4768 #include<cstdio> #include<c…
首先很明显剑的选择是唯一的,直接用multiset即可. 接下来可以发现每条龙都是一个模线性方程.设攻击第i条龙的剑的攻击力为$s_i$,则$s_ix\equiv a_i\ (mod\ p_i)$. 现在需要将方程化成$x\equiv c_i\ (mod\ m_i)$的形式,从而使用exCRT解决. 变式:$s_ix+p_iy=a_i$,先同除以$gcd(s_i,p_i)$,再使用exgcd解不定方程,求x的最小正整数解. 注意判无解,exCRT结束之后注意要使$x\geqslant max(\…
这题好像只要会用set/平衡树以及裸的\(Excrt\)就能A啊...然而当时我虽然看出是\(Excrt\)却并不会...今天又学了一遍\(Excrt\),趁机把这个坑给填了吧 现预处理一下,找出每条龙用哪吧剑,把所有龙都砍\(tmp\)刀到负血. 设之后每条龙都砍了a刀,对于第\(i\)条龙,剑的攻击力为\(w_i\),恢复能力为\(c_i\),血量为\(b_i\) 则根据题意,满足 \[ b_i-aw_i+yc_i=0 \] \[ aw_i\equiv b_i(mod\ c_i) \] 将\…