【noip2016】蚯蚓(单调性+队列)】的更多相关文章

题目链接:https://vijos.org/p/2007 题目链接:https://www.luogu.org/problem/show?pid=2827#sub 说实话当两个网站给出AC后,我很感动....这题啊,思路容易想到,就是小细节太烦了..... [思路] 这道题要开三个队列,而且需要证明到一个点才能够做.. 就是先切的蚯蚓的部分,比后切的蚯蚓的对应部分长...有可能你会想蚯蚓不是随时在长吗,当然这不影响..我们来简单证明一下 ----------------------------…
[Noip2016]蚯蚓 D2 T2 Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐蛐国里现在共有n只蚯蚓(n为正整 数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只(如有多个则任…
Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐蛐国里现在共有n只蚯蚓(n为正整 数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只(如有多个则任选一个) 将其切成两半.神刀手切开蚯蚓…
NC16430 [NOIP2016]蚯蚓 题目 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 c 向下取整,例如:\(\lfloor 3.0 \rfloor = \lfloor 3.1 \rfloor = \lfloor 3.9 \rfloor = 3\) . 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有 n 只蚯蚓(n 为正整数).每只蚯蚓拥有长度,我们设第 i 只蚯蚓的长度为 \(a_…
题目不再重复叙述 请参考: 洛谷 CJOJ 题解 先来说说非完美解法,也是我去年考场上的做法 考虑一下每一只蚯蚓增加的长度, 这个值并不需要每一次依次增加, 用一个变量维护即可,每次取出蚯蚓就加上这个值,切断蚯蚓就减去这个值. 接下来如何维护最大的蚯蚓,考虑使用一个堆来进行维护 时间复杂度O(mlogm)显然超时(其实也就是常数巨大) 现在,来考虑正解 我们先来脑补几个显然成立的结论 第一个:如果蚯蚓A长于蚯蚓B,一定是优先切蚯蚓A 第二个:一只蚯蚓被切断后,两部分长度一定不会超过原长度 第三个…
题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q<200).问m秒后的n+m条线段的长度(1≤n≤100000,1<=m<=7000000) 题解 乍一看是堆,可是堆被卡了. 我们建三个队列分别装最初的线段,和被切出来的两种线段.可以发现任何时候,一个队列里的线段长度单调递减,最长的线段,就从这三个队列里取出第一个比较就行. #include…
#\(\color{red}{\mathcal{Description}}\) LInk 这道题是个\(zz\)题 #\(\color{red}{\mathcal{Solution}}\) 我们考虑如何得部分分,即十分\(zz\)的\(\Theta((m+n)log(m+n))\),窝萌发现这个复杂度似乎可以接受,但是会爆是真的,所以每当这个时候我们就需要思考问题内部的单调性.我们发现其实对于两条蚯蚓\(A\)和\(B\),设它们的长度为\(L_A\)和\(L_B\),假设他们满足\(L_A <…
题干 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可能存在长度为0的蚯蚓).每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只(如有多个则任选一个)将其切成两半.神刀手切开蚯蚓的位置由常数p(是满足0<…
传送门 好题. 目测只会多带一个log2(n+m)" role="presentation" style="position: relative;">log2(n+m)log2(n+m)的解法,看了题解之后才会正解. 解析: 我们用三个队列来维护每次弹出的值. 第一个队列就是原数列. 第二个队列是每次砍掉后短的那一节组成的,第三个队列是长的那一节组成的. 显然这三个队列都具有单调性. 那么每次从三个队列中选一个最大的然后压入后两个队列里就行了. 实现…
题目传送门 $Sol$ $50pts$:我们考虑$q==0$的情况,每次在所有的蚯蚓中找到一只长度最大的,这非常二叉堆.所以我们可以用一个优先队列,随便水一下就有50分.($NOIp$的分真这么好拿?) (理论得分60分,由于种种常数等的原因,实际会达到50分) #include<cstdio> #include<algorithm> #include<queue> using namespace std; int n,m,can,u,v,t; ]; priority_…