目前的想法:
CF+Atcoder+区域赛:div2ef,eduef,div3G,atc区域赛(视题目难度而定)。
模板:每周学若干个模板,并找相应题目做。
本周任务:
拟阵交
今日题目:
区域赛:2020济南H
CF题目
近两年区域赛
\(比赛\) | \(A\) | \(B\) | \(C\) | \(D\) | \(E\) | \(F\) | \(G\) | \(H\) | \(I\) | \(J\) | \(K\) | \(L\) | \(M\) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
\(2020济南\) | \(\checkmark\) | \(N/A\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(N/A\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ||
\(2020上海\) |
板子
数学
\(模板\) | \(学习/实现\) |
---|---|
\(原根\) | |
\(裴蜀定理\) | |
\(杜教筛\) | |
\(矩阵树\) | |
\(扩展欧拉定理\) | |
\(ex Lucas 定理\) | |
\(exCRT\) | |
\(exgcd\) | |
\(\bullet min25筛\) | |
\(高斯消元\) | |
\(欧拉函数相关\) | |
\(莫比乌斯反演\) | |
\(\bullet 线性规划\) | |
\(BSGS\) | |
\(整除分块\) | |
\(线性基\) | |
\(容斥原理\) | |
\(min-max 容斥\) | |
\(二项式反演\) | |
\(常见数列\) | |
\(\bullet polya\) | |
\(\bullet 拟阵交\) | |
\(线性筛一般积性函数\) |
多项式
\(模板\) | \(学习/实现\) |
---|---|
\(\bullet 多项式全家桶\) | |
\(\bullet 集合幂级数\) | |
\(\bullet FWT/FMT\) |
字符串
\(模板\) | \(学习/实现\) |
---|---|
\(扩展 KMP(Z 函数)\) | |
\(PAM\) | |
\(AC自动机\) | |
\(失配树\) | |
\(manacher\) | |
\(SA/SAM\) | |
\(\bullet 最小表示法\) | |
\(\bullet lyrdon分解\) |
数据结构
\(模板\) | \(学习/实现\) |
---|---|
\(可持久化线段树\) | |
\(平衡树\) | |
\(\bullet lct\) | |
\(\bullet 李超树\) | |
\(树上启发式合并\) | |
\(虚树\) | |
\(KDTree\) | |
\(\bullet 析合树\) | |
\(可持久化并查集\) | |
\(STL\) | |
\(\bullet Seg-beats\) |
图论
\(模板\) | \(学习/实现\) |
---|---|
\(单源最短路径\) | \(\checkmark\) |
\(最小生成树\) | \(\checkmark\) |
\(2-SAT\) | \(\checkmark\) |
\(缩点\) | \(\checkmark\) |
\(欧拉路径\) | |
\(prufer\) | |
\(\bullet 最小树形图\) | |
\(\bullet 一般图匹配\) | |
\(\bullet 圆方树\) |
网络流
\(模板\) | \(学习/实现\) |
---|---|
\(最大流\) | |
\(费用流\) | |
\(\bullet 模拟费用流\) |
分治
\(模板\) | \(学习/实现\) |
---|---|
\(点分治/边分治\) | |
\(cdq分治\) |
计算几何
\(模板\) | \(学习/实现\) |
---|---|
\(极角排序\) | |
\(线段相交判定/交点\) | |
\(凸包\) | |
\(多边形包含\) | |
\(旋转卡壳\) | |
\(半平面交\) | |
\(面积并\) |
其他知识点
\(模板\) | \(学习/实现\) |
---|---|
\(插头dp\) | |
\(最小斯坦纳树\) | |
\(各类dp优化\) | |
\(\bullet dp套dp\) | |
\(矩阵乘法归约\) |
题解
CF777E
关键一步是可以通过当前在场学生的编号最大值算出变换的步数,进而算出对于每个座位,哪些座位上的人最终会到达它上面。然后对于每个座位,它对应的到达集合中标号最小的座位上一定坐的是最终序列中坐在它上面的人,剩下的字典序贪心即可。
CF777F
官方题解没看懂,但是自己好像yy出了一个,就是用这个的第一题的做法,设f[i][j]表示前i个元素形成两个上升子序列,其中一个末尾是a[i],另外一个末尾是j的可行性,和之前提到的题目一样转移,中途用可持久化线段树维护历史版本,还要对后缀维护一个同样的东西。然后枚举其中一个最高点(并且是两个最高点中高的那个,便于统计),对两边线段树上小于最高点的值的位置求和(注意这里有细节,不是所有的可行点都可以计入答案,要去掉小于两边最小值中较大的那个的所有位置)。复杂度1个log。
edu124E
一张每个点度数均不超过2的二分图就是一堆环+路径,考虑从所有点中除去不会成为匹配中的点,那么最终结果就是剩下的点数目/2。环和偶数长度路径显然不需要删点,奇数长度路径需要删去一个点。对于每个可能的奇数路径统计出现次数,一个奇数路径存在当且仅当路径上的每个点都在区间中,而路径两边的点不在。
edu124F
考虑一次怪物从前往后走的过程,假设在某个位置怪物死亡,那么塔的序列将变成:
这个位置之前:怪物路过时清零,只有新增的部分
这个位置:减去怪物死亡前的血量
这个位置之后的部分:不影响
如果在每次操作的位置放一个隔板,那么显然两个隔板之间的区间和可以O(1)求出(二维前缀和),如果一次操作怪兽路径覆盖某个隔板,那么这个隔板就不再有意义,可以删去。对于后面未访问过的部分,直接暴力推就行,每个点只会作为“没被访问过的点”访问一次。
edu127E
有一个非常有用的启发:
对于一个可逆的操作,一个状态能达到的极大状态集合与集合内其他状态相同(证明显然),对于不同构的两个状态,前面定义的这个集合交集为空。
对于树上的一个点(显然代表的实质上是一个区间),如果左右子树同构,那么定义节点i表示区间可以通过swap得到的不同字符串的种类个数为 \(f(x),那么有:f(x)=f(ls) \times f(rs) \times (ls与rs同构)?1:2\) 。
意思是如果同构,那么方案数就是左右乘积,交换无异议;否则交换有意义,要乘2。
edu127F
直接dp合法序列数,令\(dp[i][j][k]\)表示1-i的排列,逆序对个数为j,相邻逆序对个数为k的排列个数,转移枚举i放在1到i-1的排列中的哪个位置。后两维用矩阵乘法维护,再用小Y与奴隶主的经典套路维护答案。
789E
相当于若干个环,随意赋值,最小化相邻两个数的距离之和。
先考虑只有一个环,发现,对于偶数长度的环,假如有3个连续的位置满足单调,总能够从通过交换而构造出一个更优的,且这三个位置不单调的方案,所以最终结果一定是类似于山峰-山谷型的,山峰对答案贡献+2,山谷贡献-2,显然把大的数全部放在山峰,小的数放在山谷最优。奇数长度的环,考虑1所在的位置,它的前一个数一定大于它,而它前面的前面的数又一定大于它前面的数(环长是奇数),一定有一个数对答案的贡献是0,其他数和偶数长度环同理。
对于多个环,贪心的把大数放在山峰,小数放在山谷即可。
789F
每次冒泡相当于序列非0数字-1,左移一位并在最右端添0,可以得知k次冒泡之后的结果是右边若干个0,左边的每个数分别对应最初序列中的某个数。可以直接简单组合算出最初v序列的可能数量,然后可以发现v和原排列是一一对应的。
788E
考虑到答案不可能小于(1<<(p-1)),而样例给出的答案正好是(1<<2),于是尝试去构造一个答案等于(1<<(p-1))的解。
一个合法的解是在根放(1<<(p-1)),然后相邻点随意放大于等于(1<<(p-1))的数字,在后面再放上这个数-(1<<(p-1)),然后在随便放一个小于(1<<(p-1))的数,再放这个数+(1<<(p-1)),剩下的依次类推。
788F
转化为前缀。考虑当前这一位能放多少,如果这一位能放的数超过2n,那么后面显然没有限制,可以随意,否则用类似与数位dp的方式处理,令f(i,j)表示当前第i位,能放多少的方案数。复杂度 \(O(n^{2}\log |r|)\) 。
2020济南A
列与列独立,列内相当于求异或线性方程组自由元的个数。
2020济南F
f,g显然可以暴力求。
考虑后面这一团式子,令\(i=a_{1}T_{1}\) , \(k+1-i=a_{2}T_{2}\) 。
那么有 \(k+1=a_{1}T_{1}+a_{2}T_{2}\)。
两边同时mod \(T_{1},T_{2}\) , 得
设 \(gcd(T_{1},T_{2})=d\) ,则: \(d|i 且 d|k+1-i \Rightarrow d|k+1\) 。
又因为 \(d|T_{1}|k\),所以 \(d=1\) 。
由于互质,所以 \(a_{1},a_{2}\) 有且仅有唯一解 \(x_{1},x_{2}\) 满足模意义下的方程。
设\(a_{1}=T_{2}b{1}+x_{1},a_{2}=T_{1}b{2}+x_{2}\)
代入 \(k+1=a_{1}T_{1}+a_{2}T_{2}\)可得:
\(k+1-(b[1]+b[2]) (T_{1}T_{2})=x_{1}T_{1}+x_{2}T_{2}\)
因为d=1,所以\(T_{1}T_{2}|k\),所以两边同时取模得 \(x_{1}T_{1}+x_{2}T_{2}=1(mod\quad (T_{1}T_{2}))\)
又因为\(x_{1}<T_{2},x_{2}<T_{1}\),所以\(x_{1}T_{1}+x_{2}T_{2}<2T_{1}T_{2}\),即\(x_{1}T_{1}+x_{2}T_{2}=(T_{1}T_{2})+1\)。
代入\(k+1-(b[1]+b[2]) (T_{1}T_{2})=x_{1}T_{1}+x_{2}T_{2}\)可得:\(b[1]+b[2]=\frac{k}{T_{1}T_{2}}-1\)。
每一组\(b_{1},b_{2}\)对应一种合法解,所以一共有 \(\frac{k}{T_{1}T_{2}}\) 组解。
代回去之后发现是一个互质狄利克雷卷积。
判互质可以用欧拉函数判来避免暴力判带来的log。