LINK 思路 良心来说这题还挺思维的 我没看题解也不知道要这样维护 把每次斩断的点分别放进两个队列里面 因为要维护增长,所以可以让新进队的节点来一个负增长? 是不是就好了? 然后很容易发现因为在原始队列中小的数比大的数如果多增加了\(k \times q\)在剩下两个队列中大的分别比小的多增加大于等于\(k \times q\) 然后随便维护一下 //Author: dream_maker #include<bits/stdc++.h> using namespace std; //----…
传送门 Luogu 解题思路 很容易想到用一个堆去维护,但是复杂度是 \(O((n+m)\log(n+m))\) 的,显然过不了 \(7e6\). 其实这题有一个性质: 先被切开的蚯蚓,得到的两条新蚯蚓,一定会比后被切开的蚯蚓长. 这个可以推一下表达式,我就不打了. 那么也就是说,我们需要维护三个队列,其中每个队列的元素都是具有单调性的. 代码细节有点小多. 细节注意事项 咕咕咕 参考代码 #include <algorithm> #include <iostream> #incl…
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的路径,另一条是 \(lca\) 到 \(y\) 的路径.(对于 \(x, y\) 是 \(lca\) 的情况需要特殊考虑一下就行了) 这个求 \(lca\) 的过程用倍增实现就行了. 假设令到达时间为 \(at\) . 不难发现,在树上向上的路径满足 \(dep_u + at_u=d_1\) (深度…
「NOI2017」蚯蚓排队 题目描述 蚯蚓幼儿园有$n$只蚯蚓.幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演. 所有蚯蚓用从$1$到$n$的连续正整数编号.每只蚯蚓的长度可以用一个正整数表示,根据入园要求,所有蚯蚓的长度都不超过$6$.神刀手希望这些蚯蚓排成若干个队伍,初始时,每只蚯蚓各自排成一个仅有一只蚯蚓的队伍,该蚯蚓既在队首,也在队尾. 神刀手将会依次进行$m$次操作,每个操作都是以下三种操作中的一种: 给出$i$和$j$,令$i$号蚯蚓与$j$号蚯蚓所在的两个队伍合并为一个队伍…
「NOI2017」蚯蚓排队 这题真的草 你考虑\(k\)这么小,每次合并两个串,增加的有用串的数量是\(O(k^2)\)的,暴力加入这些串,求一下这些串的Hash值,塞到Hash表里面去 这里采用类似双hash的方法,一个表进行拉表,另一个表存这个串的权值 然后就是暴力搞了 犯了个很sb的错误,我把每个蚯蚓长度都-1了,这样很容易爆Hash 不过我最开始是对每个长度的串开一个Hash数组搞,这样空间大,时间常数大,卡不过去,但不会因为长度为0的情况爆hash 最后回来的时候,一直爆Hash到自闭…
(声明:图片来源于网络) 「NOIP2016」天天爱跑步 题解 题目TP门 题目 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含\(n\)个结点和\(n-1\)条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从\(1\)到\(n\)的连续正整数. 现在有\(m\)个玩家,第\(i\)个玩家的起点为\(t_i\),终点为…
题目链接:https://vijos.org/p/2007 题目链接:https://www.luogu.org/problem/show?pid=2827#sub 说实话当两个网站给出AC后,我很感动....这题啊,思路容易想到,就是小细节太烦了..... [思路] 这道题要开三个队列,而且需要证明到一个点才能够做.. 就是先切的蚯蚓的部分,比后切的蚯蚓的对应部分长...有可能你会想蚯蚓不是随时在长吗,当然这不影响..我们来简单证明一下 ----------------------------…
易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define ll long long using namespace std; ; ; ; int n,m,q,u,v,t,add; ][M],head[],tail[…
题目不再重复叙述 请参考: 洛谷 CJOJ 题解 先来说说非完美解法,也是我去年考场上的做法 考虑一下每一只蚯蚓增加的长度, 这个值并不需要每一次依次增加, 用一个变量维护即可,每次取出蚯蚓就加上这个值,切断蚯蚓就减去这个值. 接下来如何维护最大的蚯蚓,考虑使用一个堆来进行维护 时间复杂度O(mlogm)显然超时(其实也就是常数巨大) 现在,来考虑正解 我们先来脑补几个显然成立的结论 第一个:如果蚯蚓A长于蚯蚓B,一定是优先切蚯蚓A 第二个:一只蚯蚓被切断后,两部分长度一定不会超过原长度 第三个…
$n \leq 200000$的$1 \leq a_i \leq 6$的蚯蚓,有三种操作:让一只队头蚯蚓接在一只队尾蚯蚓后面:让一队蚯蚓从某个蚯蚓后面断成两队:问:给个字符串,问他的..算了你们直接看题吧 这什么沙雕题QAQ 所有询问的串只有$nk$种,把他们全丢进hash里面就好了..注意双hash,一个用来当链表一个用来在链表里判重. 复杂度的话,只考虑合并是$nk$的(相当于把所有串算一次),而拆分是$ck^2$的,拆对合并的复杂度影响是跟拆本身复杂度一样的. //#include<ios…