摘要:
主要记录模拟赛错题。 P1722 矩阵 II #tag:8-10 下午测试 401 错误思路:brute-force。 正确思路:dp,令 \(dp_{i,j}\) 表示以 \(i\) 结尾放了 \(j\) 个红色算筹的方案数,初始 \(dp_{0,0}=1\),答案 \(dp_{2n,n}\)(因 阅读全文
摘要:
8-12:\(90+100+0+100+0+10=300\),\(rk \ 3\)。 8-13:\(100+0+0+0+0+0=100\),\(rk \ 17\)。 8-14:\(100+0+0+0+0+0=100\),\(rk \ 17\)。 8-15:\(100+0+0+0+0+0=100\), 阅读全文
摘要:
赛时通过:A、B、C。 赛后补题:D、E。 A 依题判断即可。 #include<bits/stdc++.h> using namespace std; int y; int main(){ cin>>y; if(y%4!=0) cout<<365; if(y%4==0&&y%100!=0) cou 阅读全文
摘要:
UVA1328 简单题。 我们有结论:对于一个周期串 \(S\) 的子串 \(T\),它的最小循环节即为 \(T-nxt_{\left| T \right|}\)。(具体请查阅往期笔记) 于是,我们枚举所有前缀,检验上式是否能被当前前缀的长度整除并且不止一个循环节即可。 code #include< 阅读全文
摘要:
CF126B 朴素解法:求出原字符串的最长 border,并 kmp 匹配出出现在中间的最长 border,若没有则不断缩短 border 的长度,直到中间存在。若 border 长度减到了 \(0\),则无解。 我们通过画图来探索优化方式。 如图,蓝色部分为原串的最长 border,红色部分为蓝色 阅读全文
摘要:
Kobe-Morris-Pratt 算法 定义 一些基本定义: border:是一个字符串的子串(不与其本身相同)且满足既是其前缀又是其后缀的字符串,我们称之为该字符串的一个 border。 Kobe-Morris-Pratt 算法(以下简称 KMP 算法),是解决字符串匹配问题的一种算法,实际做题 阅读全文
摘要:
CF1092F 典。参见 P2986。 code #include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+5; int n,tot,a[N]; vector<int> G[N<<1]; in 阅读全文
摘要:
U224225 一眼网络流,但是被诈骗了。 容易发现以每个点作为源点得到的答案均不相同,考虑换根 dp。 令 \(dp_i\) 表示以 \(i\) 为根的子树的最大流量。 初始: \[\begin{cases} dp_{cur}=0\ \ \ \ \ \text{when} \ cur \ 为非叶子 阅读全文
摘要:
众所周知,换根 dp 是非常套路的。换根真好玩( 换根 dp: 当不同节点作为根时,dp 结果不一致,若枚举每个节点作为根,则时间复杂度过高,在此种情形下,可使用 换根 dp 处理相邻两节点间的贡献,从而达到快速换根的效果。 使用场景: 对于一棵树,寻找以某节点 \(u\) 为根时取得的 最大值 / 阅读全文
摘要:
P1272 & P1273 请查阅往期笔记,此处不再赘述。 其中 P1273 我们学到了定义更好求解的状态(一般是转化为价值,如本题),再通过枚举求解最终答案。 P8625 容易发现你选出的 \(S\) 一定是一个子树。 然后这题就变成最大子树和了。 关于最大子树和那题,请查阅往期笔记,此处不再赘述 阅读全文