水题记录2.4

文章目录

  • 水题记录2.4
    • [CF1764E Doremy's Number Line](#CF1764E Doremy's Number Line)
    • [CF403D Beautiful Pairs of Numbers](#CF403D Beautiful Pairs of Numbers)
    • [CF1204E Natasha, Sasha and the Prefix Sums](#CF1204E Natasha, Sasha and the Prefix Sums)
    • [CF675E Trains and Statistic](#CF675E Trains and Statistic)
    • [CF735E Ostap and Tree](#CF735E Ostap and Tree)
    • [CF441E Valera and Number](#CF441E Valera and Number)

水题记录2.4

CF1764E Doremy's Number Line

link

特判一下:

a 1 ≥ k a_1\ge k a1≥k 一定有解, a 1 + b 1 < k a_1+b_1<k a1+b1<k 一定无解。

注意到 1 1 1 在最后一定不劣,即变为后 n − 1 n-1 n−1 个操作尽量往右,最后看到达的右端 r + b 1 r+b_1 r+b1 能否到 k k k。

考虑 D P DP DP, a i a_i ai 升序排序时最优, f i f_i fi 为前 i i i 个操作能染色的最右端。

转移即为 f i = max ⁡ ( min ⁡ ( f i − 1 , a i ) + b i , max ⁡ j = 1 i a j + b j , a i ) f_i=\max(\min(f_{i-1},a_i)+b_i,\max_{j=1}^ia_j+b_j,a_i) fi=max(min(fi−1,ai)+bi,maxj=1iaj+bj,ai)。

code

CF403D Beautiful Pairs of Numbers

link

不妨考虑 i i i 个区间(差值 + 1 +1 +1)的和。

记 f i , j f_{i,j} fi,j 表示选了 i i i 个互不相同的正整数,和为 j j j 的方案数。

不妨钦定选的数单调递增。

那么可以有转移:

转移: f i , j = f i − 1 , j − i + f i , j − i f_{i,j}=f_{i-1,j-i}+f_{i,j-i} fi,j=fi−1,j−i+fi,j−i。

具体意义为:在原有的 i i i 个数都加上 1 1 1,或者给原来的 i − 1 i-1 i−1 个数都加上 1 1 1,再加入一个 1 1 1。

则 a n s = ∑ i = 1 n k ! f k , i C k + n − i k ans=\sum_{i=1}^n k! f_{k,i} C_{k+n-i}^k ans=∑i=1nk!fk,iCk+n−ik

code

CF1204E Natasha, Sasha and the Prefix Sums

link

考虑对最大前缀和为 i i i 的序列计数。

容斥为最大前缀和大于等于 i i i 的序列个数(小于等于难算)。

将题意转变为向右上和右下到 ( n + m , n − m ) (n+m,n-m) (n+m,n−m)。

考虑最大前缀和大于等于 i i i 即为与 y = i y=i y=i 有交。

参考卡特兰数,将第一次碰到 y = i y=i y=i 以左的区域翻折上去,不重不漏。

即 ( 2 i , 0 ) (2i,0) (2i,0) 到 ( n + m , n − m ) (n+m,n-m) (n+m,n−m) 方案数,发现其为 C n + m n − i C_{n+m}^{n-i} Cn+mn−i。其中 i ∈ max ⁡ ( 0 , n − m , n ) i\in\\max(0,n-m,n) i∈max(0,n−m,n)

那么便做完了。

code

CF675E Trains and Statistic

link

考虑让 f i f_i fi 表示 i i i 到 i + 1 , n i+1,n i+1,n 的最少花费之和。

考虑如何转移 f i f_i fi,不妨从后往前。

则有 f i = min ⁡ j = i + 1 a i f j + n − i − ( a i − j ) f_i=\min_{j=i+1}^{a_i} f_j+n-i-(a_i-j) fi=minj=i+1aifj+n−i−(ai−j)

考虑线段树优化 f j + j f_j+j fj+j,那么就做完了。

code

CF735E Ostap and Tree

link

考虑树上 D P DP DP。

记 f u , i f_{u,i} fu,i 表示以 u u u 为根的子树合法,且离 u u u 最近的染色点距离为 i i i 的方案数。

记 g u , i g_{u,i} gu,i 表示以 u u u 为根的子树不合法,且离 u u u 最远的非染色点距离为 i i i 的方案数。

由于合并两个状态无法改变最远非法点的距离(如不不能变成合法的话),故第二维是 O ( k ) O(k) O(k) 的。

考虑合并:

f u , i × f v , j → f u , min ⁡ ( i , j + 1 ) f_{u,i}\times f_{v,j} \rightarrow f_{u,\min(i,j+1)} fu,i×fv,j→fu,min(i,j+1)

g u , i × g v , j → g u , max ⁡ ( i , j + 1 ) g_{u,i}\times g_{v,j} \rightarrow g_{u,\max(i,j+1)} gu,i×gv,j→gu,max(i,j+1)

对于合并 f u , i f_{u,i} fu,i 和 g v , j g_{v,j} gv,j,需要考虑 i + j + 1 i+j+1 i+j+1 和 k k k 的关系,分类讨论。

合并 g u , i g_{u,i} gu,i 和 f u , j f_{u,j} fu,j 同理。

时间复杂度 O ( n k 2 ) O(nk^2) O(nk2)

code

CF441E Valera and Number

link

发现 200 200 200 次 + 1 +1 +1 最对对第八位产生影响。

考虑 f i , j , k f_{i,j,k} fi,j,k 表示到第 i i i 次操作,低八位为 j j j,低八位的前面那一串数字中连续 0 0 0 或者 1 1 1 的个数。( 以 256 256 256 为界限,例如 257 257 257 表示前面有 1 1 1 个连续的 0 0 0)

考虑转移, × 2 \times 2 ×2 和 + 1 +1 +1 分开考虑。

分类进不进位。

× 2 \times 2 ×2,进位,则低八位的前面那一串数字,若原为一串 0 0 0,变成单个 1 1 1,否则就是 1 1 1 的长度加一。

其他几种情况同理考虑。

code

相关推荐
郝学胜_神的一滴16 小时前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境3 天前
C++ 的Eigen 库全解析
c++
卷无止境3 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴3 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18005 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴5 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨5 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
LinXunFeng6 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
clint4569 天前
C++进阶(1)——前景提要
c++
夜悊10 天前
C++代码示例:进制数简单生成工具
c++