Codeforces
文章平均质量分 68
calabash_boy
退役
展开
-
NEERC 2012 Moscow Subregional D Darkwing Duck : 区间最大后缀:单调栈
从叉姐姐那里学到的棒棒题~题意:给一个串,区间询问字典序最大后缀。可以离线。n,q≤5⋅105n,q \le 5\cdot 10^5n,q≤5⋅105题目链接题解:在线做法还没看懂,留坑。离线做法是这样的:首先去掉这个题的字符串背景,单纯考虑求区间最大值,有一种离线单调栈的做法:从左到右扫,维护一个单减的单调栈,然后每次处理掉所有r=ir = ir=i的询问,只需要在单调栈里二分l...原创 2020-01-02 12:23:06 · 569 阅读 · 0 评论 -
Codeforces 949C Data Center Maintenance 缩点+拓扑
怠惰啊。。。欠了一屁股的cf比赛了。。。先发一个zz题解好了。。。题意:有n个数据中心,m个客户,一天有h小时,每个数据中心在每天的一个特定小时宕机,每个用户的数据保存在两个数据中心上,数据保证每个用户在每个小时都可以访问到数据,也就是不存在一个用户保存数据的两个中心宕机时间相同。现要选出一部分中心将他们的宕机时间向后推迟1h,且还要保证用户对数据的随时访问,问最少要选几个机器(不能选0个)。题解...原创 2018-03-12 17:46:41 · 1498 阅读 · 0 评论 -
Codeforces 919F SG大爆搜(拓扑)
题意:臭名昭著的Alice和Bob又要玩游戏 :(游戏规则:每个人有八张卡牌,卡牌的数字可以是0、1、2、3、4,在一个人的回合中,它可以选择自己一张牌,再选择对手一张牌,然后把选中的自己这个牌,替换成两张牌之和%5,对手的牌不变。率先实现八张零牌的人获胜。保证先手的人不会立即获胜,存在平局情况,数据有10W组。题解:显然这个数据量要爆搜打表O1出答案。此题无非就是一个单纯的有向图博弈,因此需要做...原创 2018-02-10 15:03:17 · 1435 阅读 · 0 评论 -
Codeforces Educational#21 Div2 E Solution
题意:01背包,1e5个物品,3e5的背包容量,物品的weight只能是1/2/3,要求cost的和最大。AC算法:裸的01背包复杂度是NM,承受不了,但注意到weight只能是1/2/3,那么转移的方式最多也就那么几种,所以可以不用对M倒序跑N个物品。注意到:由于weight只能是1/2/3,2-1=1,3-1=2,3-2=1。也就是说,转移的方式只有dp[i-1].cost+ 1-原创 2017-05-25 01:11:13 · 350 阅读 · 0 评论 -
Codeforces Educational Round#21 F(808F) Solution:网络流(最小割)
题意:给出一组卡牌(100张),卡牌有三个属性值:power,c,level,其中c和level是用来限制的,power是目标值。具体的限制规则是:只有level小于等于玩家的playerlevel的卡牌才可以使用,任意两张c之和为prime的卡牌不能同时使用。求出一个人物的最小等级,使得可以找到一个方案使得选用的卡牌的power值累计大于等于k。这个题很容易想到二分playe原创 2017-05-30 01:44:01 · 1323 阅读 · 0 评论 -
Codeforces Educational Round#21 G Solution:双函数DP+KMP
题目意思是给出一个s串,比如??c??????,然后给出一个t串,比如abcab,请你把每个问号都替换成具体的字母,使得t串在s串中有最大匹配数。题解:单模式匹配最好用的还是KMP,但是带通配符的怎么办呢?答案是用DP做。开一个f函数,f[i]记录的是1-i位置上的通配符都被替换成具体的字母后,且t刚好是preffix(s,i)的一个suffix。换句话说,就是以i为尾位置,刚好有一次原创 2017-05-30 23:39:12 · 357 阅读 · 0 评论 -
CodeForces Round #417 E Solution:Nim博弈
第一次做博弈相关的题目,所以写的比较详细。题意:给出一棵树,数据保证根为1号点,每个点上有一些石子,树的形态保证:根到每个叶子结点的路径长度奇偶性相同,也就是说叶子结点的深度彼此相差2或者4或者6等等。博弈规则:选取任意非0的点,如果是叶子结点,那么取出任意多个石子吃掉;如果不是叶子节点,取出任意多个石子加到一个孩子上去,首先出现无法操作的人输。题解:这是典型的Nim博原创 2017-06-02 21:18:49 · 284 阅读 · 0 评论 -
CodeForces Educational #24 D Solution
题意:给出一串序列(1e5个),每个数字介于1-1e6之间,给定一个A,要求:找到一个B,使得对于每个位置i:B的累计出现次数严格大于A的累计出现次数题解:这个题属于预处理技巧。每次读入一个data,如果cnt[data]合法,即cnt[data]>cnt[A],那么把cnt继续++,否则,cnt[data]停止更新。然后读入所有数据之后,遍历寻找cnt比cnt[A]大的,就是答案。Cod原创 2017-07-11 17:12:50 · 265 阅读 · 0 评论 -
CodeForces Round#423 Div2D&Div1B(827B) Solution
题意:要求输出一棵树的形态(即树的边),要求:总共有n个点,其中k个叶子节点(度为1),并且这棵树的直径要最小。题解:考虑一棵树,先画出一条直径,现在假设这个直径是最小的,那么现在考虑如何向直径链上加入树的所有节点,且不使得树的直径变大,学过均值的同学都知道要找到直径的中点,然后向外延伸一条链(树枝),否则,如果更偏左边一些,那么直径的右链和新加入的链的直径会超过原有直径。而我们又想让一条链可原创 2017-07-13 00:04:07 · 327 阅读 · 0 评论 -
CodeForces Round #423 Div2C&Div1A(827A) Solution
题意:给出若干子串(length题解:保证一定存在的意思是,用char去填空,不会出现冲突的情况。只需要把每个串的每个index都填一遍,然后空位换成‘a’输出就可以了。现在的问题是,串太多,index太多,要降低复杂度。因为不存在冲突的情况,因此填上字符的位置,不需要再做检查和重复填写,因此用并查集维护连续的finished的线段。(这不就是0$大腿给我讲的那个并查集的题吗。。。嗯。确实想到原创 2017-07-12 21:27:44 · 328 阅读 · 0 评论 -
CodeForces 827C Round#423 Div2E&Div1C Solution:树状数组或其他
题意:给出一个长串s(length一:给定l,r,matchString(字符集={A,T,G,C},且length二:给定index和c,要求把原串s的index位置的字符变成c题解:首先,先看看如何匹配,记matchString的长度是len,考虑他的matchString[0]这个字符,他将循环出现在l,l+len,l+len*2,l+len*3……这些位置和s串相应字符尝试匹配原创 2017-07-13 18:59:20 · 498 阅读 · 0 评论 -
CodesForces 831C Round #424 Div2C:Set乱搞
题意:给出k个评委打出的分数delta[i],再给出n(题解:考虑某一种使得score合法的方案。比如说是这样的情况:score[1],score[2],……score[n]分别是第G1,G2,……,Gn号评委打完分之后的中间分。那么这种方案的initScore有这样的性质:initScore=score[1]-sum[G1]=score[2]-sum[G2]=……=score[n]-sum[原创 2017-07-14 14:32:45 · 205 阅读 · 0 评论 -
CodesForces830A Round #424 Div1A:二分+二部图匹配或者三分乱搞
题意:给出一条直线(1-1e9),直线上有n(要求每个人任意拿一把钥匙,并且走到办公室位置,每个钥匙只能被一个人拿走,拿钥匙不花费时间,走一单位长度花费1s时间,求所有人都到达办公室的最短时间。题解1:所有人都到达办公室的时间=所有人里边到达办公室最耗时的那个人,那么这个题变成了最大值最小,典型的二分题,现在的问题是给定一个maxTime,想一种办法检验是否所有的n个人都可以在小于等于ma原创 2017-07-14 14:50:05 · 398 阅读 · 0 评论 -
CodeForces830B- Round#424 Div1 B Solution:二分查找+trick
题意:给出一堆卡牌(题解:直接模拟的复杂度太高了,我们来考虑一下整个过程:我们首先直到每个牌会有被取走的那一次,于是我们知道肯定会有n次成功的取牌,那么现在我们来算一下有多少次失败的选牌。我们考虑整个牌堆被刷新这样的周期(就是说再一次从第头开始取):除掉成功的选取之后,失败的选取就等于最后一次成功选取之后,整个牌堆的牌数(也等于周期开始时的牌数-这一个周期成功选取的牌数)。那么我们把整个过程分原创 2017-07-14 23:46:39 · 645 阅读 · 0 评论 -
Codeforces 932E:第二类斯特林数
题意:n、k为常数,模为1e9+7,求: ∑i=1N(ni)∗ik\begin{equation*}\sum_{i=1}^{N}\tbinom{n}{i}*i^k\end{equation*}题解:将i^k用斯特林数展开并化简之。 nk=∑i=1kS2(k,i)∗ni−\begin{equation*}n^k=\sum_{i=1}^{k}S_2(k,i)*n^{\underline{i}}原创 2018-04-09 17:29:20 · 566 阅读 · 0 评论 -
Codeforces 961G:第二类斯特林数
题意:给出一个数列wi,对于一个集合S,,对于一个w的划分R,,求w的所有划分为k部分的W之和。题解:有一个显然的事实是:每个数字是等价的,也就是说每个数字wi单独来看,他在最终答案中的贡献都是p*wi,p是计算出来的一个系数。因此 答案=p*Σwi。单独考虑每一个wx,设S是一个包含wx的集合,,那么wx对这个集合的贡献是|S|*wx,这个|S|可以分均到S中每一个元素身上,即和wx在同一个集合...原创 2018-04-08 20:46:05 · 592 阅读 · 0 评论 -
Codeforces 962F:Tarjan点双连通分量
前置技能:Tarjan三算法:强连通分量、点双连通分量、边双连通分量。资料:Tarjan三大算法之双连通分量(双连通分量)题意:给出一个无向图,求出所有只在一个简单环上出现过的边。简单环:环上每两个点都不同。题解:这个东西,稍微想一下发现,他就是个仙人掌那样的分量。。。思路基本一致。思路很清晰,就是找到简单环,那么我们可以先找环,然后判断他是不是简单的。而点双连通分量的定义就是,每一个连通分量中的...原创 2018-04-11 17:02:45 · 766 阅读 · 0 评论 -
Codeforces 图论板刷总结(更新中)
图论太菜了呀,那怎么办呀,刷点题吧,写下来可以以后复习,或者造福后人?大概就从这开始刷吧:Link题目对应简略思路+题解786B 区间图最段路741C 构造题 二分图567E 最短路DAG必经边527E 欧拉回路786B 区间图最段路没啥好说的,标准的区间图最短路,建议整理板子。我的板子:Link741C 构造题 二分图很容易被搞到2-sat上去,但是猜到一定有解的情况下, 构造出二分...原创 2019-09-07 22:22:45 · 2421 阅读 · 4 评论 -
Codeforces 653F Paper Task : SAM
题意:给出一个括号串,求有多少个本质不同的合法括号子串。题解:首先,本质不同操作,果断SAM走一波。然后括号序列,前缀和一波,处理得到sum数组。然后map<int,vector<int>>map<int,vector<原创 2018-12-20 01:32:40 · 522 阅读 · 0 评论 -
codeforces gym 100962 D Deep Purple: SAM+树剖+线段树
题意:给出一个字符串,有q次询问,每次询问一个子串S[l,r]S[l,r]S[l,r]最长的border,即最大的t&lt;r−l+1t&lt;r-l+1t<r−l+1,满足S[l,l+t−1]=S[r−t+1,r]S[l,l+t-1] = S[r-t+1,r]S[l,l+t−1]=S[r−t+1,r]。题解1:复杂度O(nlog2n)O(nlog^2n)O(nlog2...原创 2018-10-30 00:29:37 · 838 阅读 · 0 评论 -
Codeforces 1073G Yet Another LCP Problem:SAM+虚树DP
题意:给出一个长度为n的串s,每次询问给出两个整数集合:S,T,求∑x∈S∑y∈TLCP(S[x,n],S[y,n])\sum_{x \in S} \sum_{y \in T}LCP(S[x,n],S[y,n])∑x∈S∑y∈TLCP(S[x,n],S[y,n])题解:先将S reverse一下,询问等价于 前缀的最长公共后缀,而两个串的最长公共后缀,对应于他们sam节点的fail树...原创 2018-10-26 23:52:31 · 641 阅读 · 0 评论 -
Codeforces 570E Pig and Palindromes : DP+滚动
题意:给出一个n*m(n,m&lt;=500)的矩形区域,每个格子上有一个小写字母,从(0,0)出发,只能向右或上走,走到(n,m),且要求路径上的字符构成回文串,问方案数。题解:由于是回文串,要求对称,因此我们从两头一起走。dp[step][xl][xr]dp[step][xl][xr]dp[step][xl][xr]表示现在两头分别走到了(xl,step−xl)(xl,step-xl)...原创 2018-10-09 14:36:08 · 276 阅读 · 0 评论 -
Codeforces 246 E Blood Cousins Return: DSU on Tree
题意:给出一棵树,其中father=0的为根,会有多个根,每个点有一个name,有Q次询问,每次询问节点v的深度为h的儿子的name有多少种。题解:DSU ON Tree using mapO(nlog2n)O(nlog^2n)O(nlog2n)Code:#include &lt;bits/stdc++.h&gt;using namespace std;typedef long l...原创 2018-10-08 13:31:49 · 223 阅读 · 0 评论 -
Codefoces Gym 101915 G Robots : Brute Force
发一个水题。。证明我还活着。。。题意给出一棵边权互不相同且根为1的树,并给出q次询问,每次询问给出一个x,问,从根出发,只能往儿子走,每次会选择不超过x的最大的边走下去,如果不存在儿子或者不存在这样的边,则停止,问最终会停在哪个点,将所有询问的答案求和输出。题解:无脑一把梭题解 :离线,然后LCT,没了。暴力题解:离线,从小到大把边插入树中,每次插边的时候,如果近根点已经有了一个儿子边,...原创 2018-10-01 22:33:05 · 416 阅读 · 1 评论 -
codeforces 992D:并查集
题意:给一个数列,求出子区间个数,要求满足∏rlai=K∗∑rlai∏lrai=K∗∑lrai\prod_{l}^{r}{ai} = K*\sum_{l}^{r}{ai} 数据范围: 1&lt;=n&lt;=2e5 1&lt;=K&lt;=1e5 1&lt;=ai&lt;=1e8题解:数据范围已经安排好了算法。计算等式右端的最大值:1e5*2e5*1e8=2e18。嗯LL刚好...原创 2018-06-19 07:31:17 · 686 阅读 · 0 评论 -
codeforces gym 101572D :BFS
题意:给出n个k维01向量,求一个k维01向量,使得给定的向量的相同位数最大值最小。题解:基本思路:最大值最小-&amp;amp;gt;最小值最大-&amp;amp;gt;bfs搜最小值-&amp;amp;gt;取最大 汉明距离:d(x,y) = x与y不同的位的个数。Min(Max(k−d(s,ai)))=Min(k+Max(−d(s,ai)))=Min(k−Min(d(s,ai)))=k+Min(−Min(d(...原创 2018-06-16 17:20:44 · 265 阅读 · 0 评论 -
codeforces 487E Tourists : 圆方树+链剖+线段树+可删除堆
题意:给出一个无向联通图,每个点有一个权值,要求兹磁一种修改操作:修改某点权值;以及一种查询操作:查询某两点x,y的所有简单路径上的最小点权。题解:这东西是必然要缩点的啦,那么问题来了,缩点有三种写法:强连通,点双,边双。显然要点双啦,题目都说了要简单路径的。那么点双一缩,变成一棵树,然后考虑树上两点,他们的简单路径并={树上路径+路径上的点双里面的所有的点}。我们仿照圆方树操作:将每...原创 2018-05-14 20:56:16 · 734 阅读 · 0 评论 -
Codeforces 925C BigSecret:01trie+贪心
题意:给出一个b数列,求一个b的排列,使得存在一个严格增的a数列,满足a[i]^a[i-1]=b[i],不存在输出No,存在则输出b。题解:大致一想,最小的b肯定可以放在第一个,因为如果不放在第一个,你可以一点一点交换到第一个上去,这个交换过程不会改变a的单增性质。那么进而,a_0确定了,那么如果我们把a_0去掉,那么剩下的a相当于都亦或了a_0,于是问题变得相似了起来,再次寻找最小的b即...原创 2018-04-30 01:47:54 · 344 阅读 · 0 评论 -
Codeforces 961F: 字符串hash
题意:给一个字符串,求出其border长度(前缀=后缀,且长度最长),然后切掉第一个和最后一个字母,再求border,直到字符串切么得了。题解:首先要发现一个性质:设一个字符串的border长度为x,那么,在这个字符串头尾各加上一个字母,新字符串的border长度最多为x+2。证明的话,考虑反证法:设原串border长度为x,即长度最长的前缀=后缀,假设添加字母之后,border'>x+2,...原创 2018-04-05 18:02:18 · 1878 阅读 · 0 评论 -
CodeForces830C-Round#424 Div1 C Solution:分块导学&膜QC霸霸
题意:有n个竹子,每个竹子有一个理想高度,竹子刚开始高度都是0,每过一天就增高1,你每隔Q天会来查看一次竹子的情况,如果竹子的高度超过(或等于)他的理想高度,那么就给他在理想高度那里来一刀,并且这个竹子停止生长。于是你最终会得到T单位的废弃竹子,现在要求在保证T题解:我们考虑:假设我现在想q天来查看一次,那么每次查看的时候,那些等待我砍刀的竹子高度肯定是q的倍数q*s,如果q*s>=a[i]那原创 2017-07-16 01:17:13 · 669 阅读 · 0 评论 -
CodeForces 825E Educational #25 E:拓扑排序+优先队列
题意:给出一个图,有N(v表示v的权值要大于u的,这样n个点赋值完成后,形成一个n的全排列。要求所有合法的全排列中字典序最小的一个。题解:我们手上有若干联通快,每个联通快要满足一定的内在大小关系,拿出一个联通快单独看,肯定不会出现环路,因为这样必然形成大于关系的矛盾,那么必然存在一些点出度=0,而这些点就是这个联通快里边的“极大值点”(说法并不是很准确,意会即可),那么我们首先可以通过判断出度原创 2017-07-17 22:25:13 · 509 阅读 · 0 评论 -
CodeForces 825F Educational Round #25 F:KMP最小循环节+DP
题意:给出一个串(len题解:显然没有后效性,思路显然是DP,记dp[i]是1..i的串的最小压缩表示,那么dp[i]可以去更新i+1..strlen(s)的dp。而他们都可以公用一个nxt数组,就是以i+1位置为首字符的字符串的nxt。现在要求i..j串的最小循环节。详细算法看CodeCode:#includeusing namespace std;#define MAXN原创 2017-07-18 10:49:20 · 442 阅读 · 0 评论 -
Codeforces 853A Round#433 Div2C & Div1A Planning:优先队列或堆或排序
题意:有n(题解:本题有一个很好的性质:所有飞机的延误时间为定值。证明的话……只考虑[1 , n]和[ k , k+n ]没有交集的情况(另外一种情况比较复杂),这个时候每个飞机必须延误,单个飞机延误时间=ti-i(ti是新的起飞时间),于是总的延误时间是∑(ti-i)=∑ti-∑i=(k+ k+1 + k+2 +……+k+n)-(1+2+3+……+n) = kn。那么既然总延误时间为原创 2017-09-07 20:14:01 · 547 阅读 · 0 评论 -
Codeforces 853B Round #433 Div2D& Div1B Jury Meeting:差分前缀和+模拟
题意:有n(题解:每个人可以先处理出一个极大可行区间,就是说我在[ dl , dr ]这段时间可以在首都呆着(保证有飞机接送),就是区间∪。然后所有人的区间取∩就是大家都在首都的最大可行区间了。如果有解,这个区间长度必须大于k。当获得了这个区间的时候,也就知道了所有的可行方案。假如一个方案是在start以及之前到达,在start+k+1以及之后离开。那么每个人显然应该选择[1 , st原创 2017-09-07 20:27:52 · 462 阅读 · 0 评论 -
Codeforces 864E Round#436E :记录转移的DP
题意:题目说的不清不楚,艰难读题…………意思是:房子着火了,有一堆古董要抢救。每个股东有三个值:t(抢救这个古董的耗时),d(古董抢救完成的时间必须严格小于d这个古董才算被抢救成功,也就是d以及d之后的时刻,这个古董就给给了),p(抢救成功这个古董带来的价值)。n题解:就是一个傻逼DP,附带上路径记录,比赛的时候被C把心态搞崩了。完全没看到这个题。果然模拟是最难的。这个DP原创 2017-09-26 00:06:47 · 297 阅读 · 0 评论 -
Codeforces 864D Round#436D :全排列乱搞
题意:给出一个序列,其中每个数字都在[ 1 , n ]范围内,现在可以进行若干操作:每次操作就是 选择一个数字,然后把他赋值成一个新数字,使得这个序列成为一个n的排列。首先求出最小操作次数,然后求出在操作次数最小的前提下,字典序最小的那个排列是什么。题解:我们先看最小操作次数:首先统计出有多少种数字出现过,然后答案就是n-种数。因为出现过的数字我们只保留一个,然后剩下的所有数字依次都赋原创 2017-09-26 00:14:41 · 424 阅读 · 0 评论 -
Codeforces 864C Round#436 C :果然还是模拟最难
题意:有一个小车,在[ 0 , a ]范围内做周期运动。运动轨迹是 0->a->0->a->0->a……,走一趟定义为0->a或者a->0。中间有个加油站,在p的位置。然后小车的油箱容量是b,走一单位的距离就消耗一单位的油。小车路过加油站可以选择不加油,也可以选择把油加满。请问要走k趟,最少需要加几次油。题解:模拟吧 模拟吧。。。。不说了。。。心塞了。。。atleft记录小车现在是不是原创 2017-09-26 00:27:46 · 385 阅读 · 0 评论 -
Codeforces 864F Round#436 F :有向图倍增
题意:给出一个有向图,没有重边和自环,每次询问s,t,k,求出s到t的字典序最小的道路上的第k个点。如果字典序最小的道路是无限长的,则认为道路不存在。如果字典序最小的道路无限长或者s到t的道路不存在,则输出-1.题解:倍增思路还比较好想,但是实现起来细节比较多。比如求s到t的道路,那么先dfs出所有可以到达t的节点。如果s不在其中,输出-1.然后先用给定的边把st数组初始化一下(用原创 2017-09-26 23:40:03 · 1524 阅读 · 0 评论 -
Codeforces 869C Round #439 Div2 C:排列组合计数
题意:给出三片点,第一片点是红色,第二片是蓝色,第三片是紫色。现在要求你往上边加一些边,得到一个合法方案是:同颜色的两个点,要么不可达,要么最短路长度>=3。求出所有合法方案数。题解:显然三种颜色,最短路>=3,肯定这里面有猫腻,首先显然,两个相同颜色的点不能连边,那么我们考虑一下这个最短路>=3是怎么来的。每个点只能直接连接到不同颜色的点,而这个不同颜色的点不能再连第二条边到颜色1的原创 2017-10-09 21:30:26 · 624 阅读 · 0 评论 -
Codeforces 870E:计数问题
题意:给出N个二维点,坐标都是整数,每个点可以不画线,也可以画一条竖直的线,也可以画一条水平的线,但是最多只能画一条线。 求图案方案数。题解: 假设两个点他们相互独立,那么答案就是组合一下,可以分别来算。那么思路就是:把相互之间冲突的点放到一个联通快中,然后每个联通快单独计算,再乘起来就行了。冲突定义为:两个点要么横坐标相同,要么纵坐标相同,要么同时和第三个点冲突。(也就是说一个联原创 2017-10-16 14:34:53 · 984 阅读 · 0 评论