CF1942

A

构造一个长度为 n 的数组,使得它的 n 个循环右移中,恰好有 k 个是升序排序的。或判断不存在。

如果 k=1,输出 1 2 3 ... n;如果 k=n,输出 n1。否则不存在满足要求的数组。

B

有一个 0n1 的排列 p。令 ai=mex(p1pi)pi。给定 ai,构造一个 p 满足 a 的限制。

注意到 an=npn,所以可以求出 pn,然后一路往小推过去。

C1

有一个正 n 边形,给定了 x 个点。在这 x 个点之间任意连若干条不相交的线,会把多边形分成若干块。问最多分成多少个三角形

只考虑这 x 个点构成的 x 边形。

以这种方式切分一定是最优解。能分出 x2 个三角形。

所以答案就是 x2+原本就被割出来的三角形个数

C2

相较于 C1,我们可以额外选择 y 个点加入原来的 x 个点中(变成在这 x+y 个点间连边)。问此时最多分成多少个三角形。

考虑原本两个关键点之间的距离 d。如果 d=2,一开始就累加进答案;如果 d=1,跳过,都没有能连的地方。

  1. d=2k(k>1)。一个隔一个标记,标记 x 个贡献 2x。如果 x=k,额外贡献 1

  2. d=2k+1。同上,但是无额外贡献。

综上,前一种情况更优。把所有 di 按奇偶性分成两组,分别从小到大排序,贪心地先选偶数再选奇数,可以证明是最优的。

D

n 个格子,编号为 1n,初始时都是无色的,你可以对其中一些格子进行染色。

给定一个 n×n 的矩阵 ai,jij 的部分,一个染色方案的权值定义为:若该染色方案中被染色的块编号的集合等于 i=1m[li,ri],其中 lmrm,1i<m,liri<li+11,则该方案的权值为 i=1mali,ri。求所有 2n 种染色方案中权值前 k 大的值。每个测试点 t 组测试用例。


这个题一看就很像动态规划,但是有一个前 k 大,我们不是很好处理,所以我们考虑设 fi 为前 i 格能获得的前 k 大权值,也就是每个状态是一个数组。

转移的时候就是从 f1i1 的数组中取出最大的 k 个。于是这个题就变成序列合并。复杂度 O(nklogn)。时限是 4.5s 可以通过。

posted @   FLY_lai  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示