\(\text{CF547D Mike and Fish}\)
对于横坐标相同的点两两连边,剩下一个点不管,纵坐标同理
这样形成的图是二分图,因为一个点只会在横轴上连出一条边,纵轴上连出一条边。最后黑白染色即可
\(\text{CF547E Mike and Friends}\)
差分询问,考虑每个字符串对询问的贡献
于是建出 ACAM
,顺序处理每个字符串对别的字符串的贡献
发现就是在 fail
树上单点加,询问子树和,树状数组即可,\(O((n+q)\log n)\)
\(\text{CF521D Shop}\)
对一个位置,自然的贪心是按 1 2 3
操作
且 1
只需保留最大数,要么用要么不用;2
从大到小操作一段前缀;3
自由人
但位置与位置间还得抉择,貌似只能劣质 \(dp\) 了,这似乎没办法优化
另一种视角:乘法很自由,不受位置影响。考虑都转成乘法,然后取前 \(m\) 大
2
可以把每步加法转成乘法,因为加之前和加之后的数都是确定的,于是加上一个数变成乘上一个数,且乘上的数是降序的,贪心选择时仍然是依照前缀顺序操作,仍等效于加法时加一段前缀
1
可以看成对原数加一个增量,把它转成加法后纳入原加法的排序中,发现仍然是对的
因为选了 1
操作结合选了的加法是加了一段前缀,而全部转成乘法后也等效于加一段前缀
当然输出操作顺序时自然要把同一个位置的 1
操作提到 2
操作前
\(\text{CF527E Data Center Drama}\)
未定向前,把度数为奇数的点两两连边,然后这张图必存在欧拉回路,那么跑一个欧拉回路相邻边定向相反
注意到边数要求是偶数,那么连完后若总边数为奇数就随便找个点连自环即可
\(\text{CF585F Digits of Number Pi}\)
很明显的 ACAM
上数位 \(dp\),是否出现过长度至少为 \(\lfloor \frac d 2 \rfloor\) 的子串只需将 \(s\) 中长度为 \(\lfloor \frac d 2 \rfloor\) 的子串扔进自动机里边即可
\(\text{CF555E Case of Computer Network}\)
容易发现边双缩点之后一个连通块内怎样都可以互达,那么剩下的就是给树边定向了,简单差分就好
\(\text{CF1012B Chemical table}\)
想了一会发现重点不在决策上,而在刻画连锁染黑的过程中
很容易扔到二分图上观察,一条边表示原图一个点,观察连锁染黑的性质
然后就没看出来了。。。
事实上只需关注二分图上的连通块
考虑连通块中边集对应的点集,而这些点集能构成的所有边都被连锁染黑了
也就是把 \(O(n^2)\) 的边信息转成了 \(O(n)\) 的点信息
那么我们只需要把这些连通块连到一起即可
\(\text{[ARC102F] Revenge of BBuBBBlesort!}\)
感觉这种思维题很需要猜结论
常规思路是观察逐位复原的性质,没头绪,转为观察操作本身的性质
发现操作的中点只会是 \(p_i=i\) 的点
然后自然发现可互相交换的位置的封闭性,那么一段一段的看
值域固定,然后不存在三个非可操作中点使得其值降序,这些是充要条件
\(\text{[AGC030D] Inversion Sum}\)
考虑两个位置的大小关系,统计对答案的贡献
经典地转为求期望
\(\text{CF627E Orchestra}\)
先考虑个聪明点的 \(O(n^3)\) 做法
确定矩形上下边界,然后双指针左右边界统计
优势是无论实际存在点有多少
注意到 \(n,k\) 很小,尝试优化上述做法
对于一个左边界确定一个最小右边界,左边界可向左往空列扩张
不重不漏的准则可定为包含某个点使得其在最左边,那么贡献 \((c-y+1)\times(y - y_{pre})\)
于是把范围内的点按 \(y\) 排序,对每个点按如上叙述计算贡献,\(O(nk)\)
上边界固定,下边界移动,发现增加点的总量是 \(O(n)\)
考虑直接加点计算贡献增量,加进一个点只会影响 \(O(k)\) 个点的贡献
下边界从大到小移动使加点变为删点,链表即可做到 \(O(n^2k)\)
\(\text{CF573E Bear and Bowling}\)
很容易想到一个贪心:逐渐扩大 \(b\) 的组成,每次加一个使当前 \(b\) 序列贡献最大的 \(a_i\),答案每次取 \(\max\)
于是就要维护形如 \(k_ia_i+b_i\) 的贡献,支持区间 \(k_i+1,b_i+v,\max\)
分块后变成 \(k+1,b_i+v,\max\)
注意到一个整块的 \(k\) 是一样的(取点所在块重构),那么就变成了那个斜率询问 \(\max ka_i+b_i\) 了
对于每个块,单调队列维护凸包,\(O(n\sqrt n)\)
原以为细节挺多的,结果一遍过了
提交记录
\(\text{CF576D Flights for Regular Customers}\)
容易 \(dp_{i,j}\) 表示能否走过 \(j\) 条边到达 \(i\)
但 \(d\) 很大,想到矩阵快速幂
按 \(d\) 排序后一段一段地做,每段解锁一条边
矩阵快速幂求出恰好走 \(t\) 条边到达的点
然后每段都跑一次最短路取 \(\min\)
不过时间卡得紧,快速幂要用 bitset
优化