CF / At 记录

CF 1679

CF1679

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)×hidi1] 打包处理,这段内取最大 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 ciChidi

这里我们套用上面的套路,枚举 c i c_i ci,再枚举其倍数,然后把一段 C C C 更新,每种 c i c_i ci 只需保留 h i d i h_id_i hidi 最大的

不用写区间赋值,可以直接赋值到后缀,这么显然是正确的

E *2200

反而不难的数数题

F *2600

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值