CF 1679
D *1900
二分答案,每次重建图,问题转化为找最长路
直接 spfa 会 TLE,考虑拓扑排序,有环直接可以,否则是 DAG,可以 dp
E *2400
注意询问的是 每一种替换方式中回文子串的总个数 再求和
对于一次询问可以 n 2 n^2 n2 暴力 dp ,计算出 [ l , r ] [l,r] [l,r] 能拼成回文子串的方案数,在乘上剩下的随便填
考虑优化,注意到对于 [ l , r ] [l,r] [l,r],除了那些必须要填的字符以外,剩下的字符只关注数量就行,只需计算 f [ l , r , x ] f[l,r,x] f[l,r,x] 表该区间内,除必须字符外还有 x x x 个字符,方案数
求答案时,对于一个字符集 s s s,直接枚举所有子集,计算贡献,预处理之
F
dp,可订,待补
CF 1473
C *1500
考虑临项交换,不改变逆序对数的前提下把字典序大的往前面放
E *2400
好题
直接跑 dj 是不行的,因为不知道边权的优先级
二次建图也不是很好直接做
先转化:注意到对路径权值的限制较多,尝试放宽限制,容易想到可以转化为 在路径上任选一条边不计贡献,任选一条边 2 2 2 倍贡献,求最小权值
对于这种问题(实时维护路径信息)可以有两种处理方式:
拆点, f [ i ] [ 0 / 1 ] [ 0 / 1 ] f[i][0/1][0/1] f[i][0/1][0/1] 表示到 i i i 号节点,是否用过 1 / 2 1/2 1/2 操作时的最短路,直接 dj 维护转移即可
分层图,将图拆成四层,表示两种操作的使用情况,正常最短路
F *2700
网络流,待补
CF 1661
C *1700
奇奇怪怪
首先发现最终高度只能是 Max , Max+1
考虑当高度确定时怎么求答案
这么思考:操作次数一定时能够长高的总高度是固定的,只需让空操作尽可能少
总高度已知,可以得到 奇操作/偶操作 的关系,希望二者尽可能接近
唯一的限制是 偶操作有上限,等于每棵树能进行的最大偶操作数之和
在这个限制下,求二者最接近时的答案即可
D *1900
离谱!
尝试从第一个数开始考虑,显然必须 a [ 1 ] a[1] a[1] 次,可是枚举到后面,对于 a [ i ] a[i] a[i],如果让操作区间往左一点,会使 a [ i ] a[i] a[i] 减的更多;但往右移一点,对后面的贡献会更远。不知道怎么贪心
这种时候要么上 dp,要么就要转化一下枚举方式了!
倒着枚举,发现一切都解决了!
牛*
另外还需要维护区间加等差数列,通过二次差分转化为单点修改,边枚举边做
E *2500
F *2600
CF 1657
D *2000
朴素的想法是对于一只怪
(
H
,
D
)
(H,D)
(H,D),用第
i
i
i 种战士的代价为
c
i
(
⌊
H
D
h
i
d
i
⌋
+
1
)
c_i(\left \lfloor \frac{HD}{h_id_i} \right \rfloor +1)
ci(⌊hidiHD⌋+1)
想到之前见过的套路,对于取整符号可以直接枚举 h i d i h_id_i hidi,再枚举其倍数,然后对于一段 [ j × h i d i , ( j + 1 ) × h i d i − 1 ] [j\times h_id_i,(j+1)\times h_id_i-1] [j×hidi,(j+1)×hidi−1] 打包处理,这段内取最大 c i c_i ci 即可,复杂度 O ( V l o g V ) O(VlogV) O(VlogV)
然鹅我们发现 h i d i h_id_i hidi 值域是 1 e 12 1e12 1e12 !
回到题目中,观察到这里的 C C C 比较小,而且又有输出 − 1 -1 −1 要求,考虑预处理所有 C C C 的情况
于是问题转化为:对于钱数 C C C,最多能打死 H D HD HD 为多少的怪?显然是 ⌊ C c i ⌋ h i d i \left \lfloor \frac{C}{c_i} \right \rfloor h_id_i ⌊ciC⌋hidi
这里我们套用上面的套路,枚举 c i c_i ci,再枚举其倍数,然后把一段 C C C 更新,每种 c i c_i ci 只需保留 h i d i h_id_i hidi 最大的
不用写区间赋值,可以直接赋值到后缀,这么显然是正确的
E *2200
反而不难的数数题