摘要:
我永远喜欢珂朵莉! 阅读全文
摘要:
难度在最近遇到的题里相对较高,在这里写一篇珂学题解。 (以下是学校给的部分分) \(20\%\):直接暴力枚举。 另外 \(20\%\):假如我们取 \(pre\),对于 \(pre<l\) 的,\(ans++\),明显二维偏序,树状数组或 \(cdq\) 即可,时间复杂度 \(O(n\log n) 阅读全文
摘要:
不知道大家做没做过数列分块基础9题? 插入删除操作可以用链表,线段树等数据结构都不好维护,考虑分块。对于修改操作,暴力重构受影响块的链表,发现除首尾块外,其他块都可以看作是区间左移一位,所以加头删尾即可。 每个块开一个数组(绝对不能是 \((un\_)map\),不然你会和我一样死的很诡异),表示这 阅读全文
摘要:
给一篇题解。(下面这张图是从 luogu 上粘贴的,因为不太会画图) 其中纵坐标为 \(t\),横坐标为 \(a_i\)。 发现同颜色块只有平行四边形和直角梯形(等腰直角三角形)两种情况。 可以将直角梯形削去左下角,分成两部分考虑。 等直可以直接暴力插入区间,总个数 \(O(n)\)。 平行四边形可 阅读全文
摘要:
考试一道题题解。 30pts:枚举所有串,\(check\) 是否可行。 60pts:做 \(bfs\),暴力推演变化过程,用 \(map\) 去重,时间复杂度 \(O(nC_{n}^{n/3}C_{n-n/3}^{n/3})\)。 #include<bits/stdc++.h> #define l 阅读全文
摘要:
在考场遇到了这道题,感觉很有意思。 当时直接想到的就是虚树,可惜打挂了。 后来改对了,写篇题解纪念一下。 首先看到 \(\sum M_i\le 2\times 10^5\),很容易想到虚树的数据范围。 我们设 \(dp_i,fg_i\) 表示将 \(i\) 的子树全部染白或染黑需要多少次,\(vis 阅读全文
摘要:
后缀自动机维护子串公共后缀方便一点,所以直接倒序插入字符串即可。 我们给所有前缀打上标记,然后跑树形 \(dp\),设 \(sum_i\) 表示第 \(i\) 个点的子树内有多少个前缀,\(ans\) 统计 \(\sum \text{LCP}(T_i,T_j)\),则有: \[ans=\sum\li 阅读全文
摘要:
讲一种自认为最暴力的方法。 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串。 这里我们对于每一个子串开一个大小为 \(n\) 的标记,表示他在不在第 \(i\) 个卡片串里。 然而这样很明显容易 \(\text{MLE+TLE 阅读全文
摘要:
所有子串,一眼 \(\text{SAM}\)。 从根开始一直往下走,走到任何一个点都代表一个子串。维护 \(sm\) 表示每个子串有几个(\(t=0\) 就当一个),可以用树形 \(dp\) 跳后缀链接树,然后暴力跑 \(\text{SAM}\) 即可。 当然我们发现这样时间复杂度会爆炸,因为第二部 阅读全文
摘要:
我们设 \(dp_{i,j}\) 表示第 \(i\) 到第 \(j\) 个括号合并为序列且最外层不是括号 \(i\) 的可能性,\(f_{i,j}\) 表示最外层是括号 \(i\) 的可能性。则有: \[\begin{cases} dp_{i,j}=\sum f_{i,k}(dp_{k+1,j}+f 阅读全文
摘要:
虽然当时文风很2,但是觉得写的蛮好的,就在这里贴一下吧。 最近学了分块(太难想了 \(qwq\) )和莫队(太神奇了 \(0w0\) ),写一个阶段性总结~ 分块 总所周知,分块是一种神奇的暴力,用 \(O(n\sqrt{n})\) 的较为优秀的时间复杂度,解决线段树与树状数组不能解决之事 那么,他 阅读全文
摘要:
五星压行大师 \(lyh\) 表示:这是难得能让他的代码长度打破百行大关的题目(182行)。 首先,根据科技与狠活,本题可以黑白染色。源点联向白格,黑格连向汇点。 发现每个格子都可以连向四个方向,所以可以建立四个点,代表水管连到了上下左右四个方向。 设四元组 \((x,y,z,p)\) 表示水管初始 阅读全文
摘要:
考试压轴题,意识到这题是线段树优化 \(dp\) 时追悔莫及。 为了简化题目,我将从起点到原点变成了从原点到起点(这样就可以省去两个数组的空间)。 想到设 \(dp_{i,j}\) 表示在第 \(i\) 层,奶牛们在 \(j\) 列时的最小移动范围,则转移方程为(设输入为 \(l,r\)): \[\ 阅读全文
摘要:
考虑将修车师傅放在一边,顾客放在一边。 对于第 \(i\) 辆车,让第 \(j\) 个修车师傅来修,放在了倒数第 \(l\) 个,那么他产生的贡献即为 \(t_{i,j}\times l\)。 我们可以将每个修车师傅拆成 \(n\) 个点,第 \(l\) 个点表示修车师傅的倒数第 \(l\) 个位置 阅读全文
摘要:
每个点拆成入点和出点。 发现每个点、每条边都只能经过一次,所以所有边的容量都是 \(1\)。 #include<bits/stdc++.h> #define ll long long using namespace std; const int N=405,M=1e5+5; int n,m,s,t, 阅读全文