
【算法】复杂度分析
文章平均质量分 85
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ4355】Play with Sequence
【题目链接】点击打开链接【思路要点】题目中提到的操作均为区间操作,考虑使用线段树。注意到数列中的数始终非负,因此3号操作可以看做询问最小值以及其出现次数。2号操作并非线段树的一般操作,无法直接支持标记合并。考虑一个被2号操作定位的区间,记区间最小值为\(Min\),严格次小值为\(Mim\),对该区间实行操作数为\(Val\)的2号操作。若\(Min+Val≥0\),显然这个操作可以看做一个区间加原创 2018-01-18 13:19:52 · 747 阅读 · 0 评论 -
【省内训练2018-11-23】Palindrome
【思路要点】考虑从两端向中间 dpdpdp 。对于此类匹配问题,考虑建立 ACACAC 自动机来描述状态。对 SSS 集合建立 ACACAC 自动机 AAA ,对 SSS 集合中所有串的反串建立 ACACAC 自动机 BBB 。记 dpi,j,k,0/1dp_{i,j,k,0/1}dpi,j,k,0/1 表示决策了最终字符串开头和结尾的 iii 个字符,在 AAA 上的匹配到的节点为...原创 2018-11-24 17:00:04 · 342 阅读 · 0 评论 -
【校内训练2019-01-08】Art
【思路要点】首先,考虑一种朴素的暴力,枚举各树边是否选取,假设选取了 xxx 条边,树将分成 n−xn-xn−x 个部分,令各部分点数为 a1,a2,a3,...,an−xa_1,a_2,a_3,...,a_{n-x}a1,a2,a3,...,an−x ,可以用矩阵树定理求解答案。由该暴力解法,我们来思考一个子问题,若不考虑暴力解法中没有选取的边是否会出现在最终的生成树上,点数为 ...原创 2019-01-08 13:46:46 · 262 阅读 · 0 评论 -
【CodeForces】Hello 2019 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Gennady and a Card Game【思路要点】按照题意模拟。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef lo...原创 2019-01-09 13:01:13 · 957 阅读 · 2 评论 -
【USACO】2019 February Contest, Platinum题解
**【T1】**Cow Dating【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑如何快速计算一个区间 [l,r][l,r][l,r] 的价值。定义二元组 (x,y)(x,y)(x,y) 来描述一个区间, xxx 表示区间中恰好有一个关键点的概率, yyy 表示区间中没有关键点的概率。显然,对于两个区间 (x1,y1),(x2,y2)(x_1,y...原创 2019-02-27 10:33:59 · 1335 阅读 · 1 评论 -
【LOJ6405】「ICPC World Finals 2018」征服世界
【题目链接】点击打开链接【思路要点】建议参考 WC2019WC2019WC2019 第一课堂陈江伦的《模拟费用流问题》课件。我们称需要军队的地方为老鼠,军队为洞,那么我们可以花费一定代价移动老鼠和洞,使得所有老鼠均进洞,我们需要最小化总代价。考虑使用贪心解决该问题,我们为每一只老鼠设定一个额外代价 −∞-\infty−∞ ,其中 −∞-\infty−∞ 是一个足够小的数,表示...原创 2020-03-26 10:24:52 · 1614 阅读 · 0 评论 -
【校内训练2019-03-17】胖
【思路要点】离线操作,我们需要求出各城市破产的时间来回答询问。考虑二分答案,我们需要能够回答形如 “ xxx 城市在 yyy 时刻遭受的损失” 的问题。对于一个修改,我们可以将其拆分为在 O(LogV)O(LogV)O(LogV) 个节点处向下传导至多 O(LogV)O(LogV)O(LogV) 层的损失,在询问时我们只需查询其至多 O(LogV)O(LogV)O(LogV) 个祖先对对...原创 2019-03-19 14:34:48 · 241 阅读 · 0 评论 -
【CodeForces】CodeForces Round #562 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Increasing by Modulo【思路要点】二分答案,贪心判断。时间复杂度 O(NLogM)O(NLogM)O(NLogM) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 3e5 + 5;t...原创 2019-05-28 15:13:38 · 452 阅读 · 0 评论 -
【LOJ3053】「十二省联考 2019」希望
【题目链接】点击打开链接【思路要点】可以发现,中心能够存在的位置同样是树上的一个连通块,一个方案合法当且仅当该联通块大小非零。注意到布尔值 “连通块大小非零” 等于 “连通块内部点数” 减去 “连通块内部边数” ,可以考虑枚举存在于最终连通块上的一点或一边,并计算使得该点或边存在于最终连通块上的方案数,再利用上述关系计算答案。以枚举存在于最终连通块上的一点 xxx 为例,我们...原创 2019-06-19 21:26:00 · 920 阅读 · 0 评论 -
【LOJ3103】「JSOI2019」节日庆典
【题目链接】点击打开链接【思路要点】考虑一种暴力维护候选点集的做法。即,在字符串不断增长的同时,若已经可以确定 TiT_iTi 不再可能成为字典序最小的循环后缀,则将 iii 在候选点集中删除。一个显然的事实是,令当前字符串已有 kkk 位,考虑 i<ji<ji<j ,若 Lcp(Ti,Tj)<k−j+1Lcp(T_i,T_j...原创 2019-06-20 20:27:10 · 1029 阅读 · 0 评论 -
【校内训练2019-06-17】随机除法
【思路要点】记 N=p1k1p2k2…pnknN=p_1^{k_1}p_2^{k_2}\dots p_n^{k^n}N=p1k1p2k2…pnkn ,则答案显然只和 (k1,k2,…,kn)(k_1,k_2,\dots,k_n)(k1,k2,…,kn) 有关,并且排序后不同的数组在 N≤1024N\leq 10^{24}N≤1024 时约有 1.7×1051.7\times1...原创 2019-06-17 19:48:15 · 640 阅读 · 0 评论 -
【LOJ2572】「ZJOI2017」字符串
【题目链接】点击打开链接【思路要点】分块维护前缀哈希值,则我们可以做到 O(N)O(\sqrt{N})O(N) 修改, O(LogN)O(LogN)O(LogN) 查询两个后缀的 LcpLcpLcp 。用线段树维护子串,记录在原串中对应的范围,以及可能成为最小后缀的起始点集。一个显然的事实是,考虑不断向字符串后方添加字符的过程,令当前字符串已有 kkk 位,考虑 i&...原创 2019-06-21 20:03:01 · 784 阅读 · 1 评论 -
【校内训练2019-07-09】积性函数求和
【思路要点】所求的式子是约数和的形式,考虑枚举一个约数 iii ,计算其被算了多少次,则答案为∑i=1N∑j=1⌊Ni⌋[gcd(i,j)=1]i=∑i=1N∑j=1⌊Ni⌋∑g∣i,g∣jμ(g)i=∑g=1N∑i=1⌊Ng2⌋i⌊Ng2i⌋\sum_{i=1}^{N}\sum_{j=1}^{\lfloor\frac{N}{i}\rfloor}[gcd(i,j)=1]i\\=\sum_{...原创 2019-07-09 14:35:05 · 362 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 035 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 XOR Circle【思路要点】题目给出的要求等价于相邻的三个数异或和为 000 。特判全部 aia_iai 均为 000 的情况,这种情况是有解的。否则,如果确定 1,21,21,2 号位置为 a,ba,ba,b ,则 333 号位置一定为 a⊕ba\oplus ba⊕b , 444 号位置一定为 aa...原创 2019-08-04 18:25:14 · 547 阅读 · 2 评论 -
【LOJ3177】「IOI2019」矩形区域
【题目链接】点击打开链接【思路要点】考虑一个区域合法的条件,其每一行的元素都要小于这一行两侧的元素,其每一列的元素都要小于这一列两侧的元素。考虑一行左右两侧的元素 a,ba,ba,b ,则 bbb 是 aaa 右侧第一个 ≥a\geq a≥a 的元素或 aaa 是 bbb 左侧第一个 ≥b\geq b≥b 的元素两者中至少有一点成立,列同理。我们称一对满足其中一个元素 bbb...原创 2019-08-14 16:26:11 · 784 阅读 · 0 评论 -
【CodeChef】Painting Tree
【题目链接】点击打开链接【思路要点】我们发现直接解决问题难以入手。回忆期望的定义,有 E=∑i=1VP(x=V)∗V=∑i=1VP(x≥i)E=\sum_{i=1}^{V}P(x=V)*V=\sum_{i=1}^{V}P(x≥i)E=∑i=1VP(x=V)∗V=∑i=1VP(x≥i) 。记树上不同的路径数为 cntcntcnt ,注意到若操作步数确定为 iii ,那么 P...原创 2018-11-04 10:35:30 · 574 阅读 · 0 评论 -
【CodeForces】Avito Code Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Antipalindrome【思路要点】当所有字符相同,答案为 000 。否则,若原串为回文串,删去其最后一个字符一定会使其变成非回文串,因此答案为 N−1N-1N−1 ,否则答案为 NNN 。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h...原创 2018-10-25 19:56:20 · 423 阅读 · 0 评论 -
【LOJ2322】「清华集训 2017」Hello world!
【题目链接】点击打开链接【思路要点】一个 101310^{13}1013 以内的数开根 666 次后一定会变成 111 ,因此有效的修改次数不会超过 6N6N6N 。设定一个阈值 α\alphaα ,若 k≥αk≥\alphak≥α ,则暴力进行询问或修改,借助长链剖分求 kkk 级祖先,单次操作时间复杂度为 O(Nα)O(\frac{N}{\alpha})O(αN) 。考...原创 2018-09-28 11:19:32 · 660 阅读 · 0 评论 -
【BZOJ4695】最假女选手
【题目链接】点击打开链接【思路要点】题目中提到的操作均为区间操作,考虑使用线段树。2号操作和3号操作并非线段树的一般操作,无法直接支持标记合并。考虑一个被2号操作定位的区间,记区间最小值为\(Min\),严格次小值为\(Nin\),对该区间实行操作数为\(Val\)的2号操作。若\(Min≥Val\),显然这个操作可以直接忽略。若\(MinVal\),我们可以将这个操作看作是对区间中最小值的整体加原创 2018-01-19 11:06:33 · 1689 阅读 · 0 评论 -
【BZOJ4488】【JSOI2015】最大公约数
【题目链接】点击打开链接【思路要点】考虑初始时,有一个整数\(X\),不断地将其替换为\(gcd(X,Y)\)的过程中,\(X\)的值至多会产生\(O(LogX)\)次变化,这是因为如果\(gcd(X,Y)\neq X\),那么\(gcd(X,Y)\)一定至多是\(X\)次大的因数,所以\(gcd(X,Y)≤\frac{X}{2}\)。从左到右枚举区间的右端点,维护所有可能的区间GCD,由前文的证...原创 2018-04-19 13:15:12 · 391 阅读 · 0 评论 -
【CodeForces】CodeForces Round #475 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接【Div.2 A】Splits【思路要点】由于我们希望得到尽可能不同的权值,我们可以考虑在拆分的开头放置若干个2,然后放1填补剩余的数字。不难发现答案等于\(\lfloor\frac{N}{2}\rfloor+1\)。时间复杂度\(O(1)\)。【代码】#include<bits/stdc++.h>using namespa...原创 2018-04-28 20:39:40 · 497 阅读 · 0 评论 -
【BZOJ5314】【JSOI2018】潜入行动
【题目链接】点击打开链接【思路要点】简单树上背包即可。时间复杂度\(O(NK)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5;const int MAXK = 105;const int P = 1e9 + 7;template <typename T> void...原创 2018-05-24 14:26:50 · 742 阅读 · 0 评论 -
【BZOJ4943】【UOJ315】【NOI2017】蚯蚓
【题目链接】BZOJUOJ【思路要点】先说做法:用链表模拟蚯蚓的队列。对于每一个1号操作,计算所有新增的,长度在50以内的子串的哈希值,并加入哈希表中。对于每一个2号操作,计算所有被切断的,长度在50以内的子串的哈希值,并在哈希表中除去。对于每一个3号操作,计算每个子串的哈希值,并在哈希表中找到它们的出现次数,并相乘得到答案。显然,2号操作的总复杂度为\(O(CK^2)\),3号操作的总复杂度为\...原创 2018-05-30 20:32:43 · 410 阅读 · 0 评论 -
【NOI2018全国热身赛】小H的树
【题目链接】点击打开链接【思路要点】考虑\(N=K\)的情况,我们要求的即为所有边权之和的两倍减去直径。因此我们本质上需要做的是求出原树的一个大小为\(K\)的联通块,使得联通块内部的边权之和的两倍减去直径最小。经典树上背包,时间复杂度\(O(N^2)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN =...原创 2018-06-24 20:54:07 · 271 阅读 · 0 评论 -
【CodeForces319D】Have You Ever Heard About the Word?
【题目链接】 点击打开链接 【思路要点】 一个重要的性质是:当我们发现当前串中不存在长度为iii的repeating block时,长度为iii的repeating block不会再出现。 证明较为简单:上述命题等价于当前串中不存在长度为2i2i2i的repeating block时,我们删去一个长度为2j(j&gt;i)2j(j&gt;i)2j(j>i)...原创 2018-07-01 20:51:17 · 415 阅读 · 0 评论 -
【CodeForces】CodeForces Round #402 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**String Game【思路要点】 显然可以二分答案。 然后判定ppp是否为删减后的ttt的子序列即可。 时间复杂度O(NLogN)O(NLogN)O(NLogN)。 【代码】 #include&lt;bits/stdc++.h&gt;...原创 2018-08-04 20:01:51 · 282 阅读 · 0 评论 -
【CodeForces】CodeForces Round #502 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**The Rank 【思路要点】 按照题意模拟。 时间复杂度O(N)O(N)O(N)。 【代码】 #include&lt;bits/stdc++.h&gt;using namespace std;const int MAXN = 100...原创 2018-08-13 15:33:05 · 361 阅读 · 0 评论 -
【CodeForces】Educational Codeforces Round 47 题解
【比赛链接】 点击打开链接 【题解链接】 点击打开链接 **【A】**Game Shopping 【思路要点】 按照题意模拟。 时间复杂度 O(N)O(N) O(N) 。 【代码】 #include&lt;bits/stdc++.h&gt;using namespace std;const int...原创 2018-08-30 13:15:24 · 388 阅读 · 0 评论 -
【BZOJ3038】上帝造题的七分钟2
【题目链接】 点击打开链接 【思路要点】 补档博客,无题解。 【代码】 #include<bits/stdc++.h>using namespace std;#define MAXN 100005template <typename T> void read(T &x) { x = 0; i...原创 2018-09-05 16:25:50 · 247 阅读 · 0 评论 -
【LOJ2326】「清华集训 2017」简单数据结构
【题目链接】点击打开链接【思路要点】注意到答案是 O(LogM)O(LogM)O(LogM) 级别的。对于每一个点 iii 我们暴力维护其 dpdpdp 值 dpidp_idpi 以及能够转移到 iii 的各个位置的中 dpdpdp 值为 jjj 的位置数 cnti,jcnt_{i,j}cnti,j 。令 f(x)f(x)f(x) 表示 xxx 的因子个数。对于操作 0...原创 2018-10-03 15:09:35 · 715 阅读 · 0 评论 -
【LOJ2329】「清华集训 2017」我的生命已如风中残烛
【题目链接】点击打开链接【思路要点】一个直观的思路是模拟该过程,当路上遇到环的时候通过类似取模的手段加速。注意到每绕一个环 LLL 的长度至少减半,因此绕环的个数不会超过 O(LogL)O(LogL)O(LogL) 。并且一个点如果在某一时刻不能够到,那么这个点就不会再被够到,所以找到一个环至多需要遍历 O(N)O(N)O(N) 个点,因此如果我们预处理每个点作为原点时极角排序...原创 2018-10-05 14:46:45 · 694 阅读 · 0 评论 -
【CodeForces】CodeForces Round #406 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Berzerk【思路要点】博弈搜索,将状态按先后手拆点,建出游戏图。若一个点存在出边指向必败态,则该点为必胜态。若一个点所有出边指向必胜态,则该点为必败态。不满足上述两点的点为平局态。用一个类似拓扑排序的过程实现即可。时间复杂度 O(N2)O(N^2)O(N2) 。【代码】#inclu...原创 2018-09-27 18:13:18 · 354 阅读 · 0 评论 -
【CodeForces1205E】Expected Value Again
【题目链接】点击打开链接【思路要点】一个字符串存在 borderborderborder iii 等价于其存在周期 N−iN-iN−i 。记 p(i)p(i)p(i) 表示是否存在周期 iii ,由期望的线性性,答案即为 ∑i,jE(p(i)p(j))\sum_{i,j}E(p(i)p(j))∑i,jE(p(i)p(j)) 。考虑枚举 i,ji,ji,j ,如何计算 E(p...原创 2019-08-24 15:18:06 · 568 阅读 · 0 评论