CF1841

A

题意:给一个长度为 n 的全是 1 的数列,Alice 先操作,Bob 交替。每次操作选择至少两个(可以更多)相等的数字,删除它们,在序列中加入它们的和。直到有人不能操作为止,这个人就获胜了。

问:谁有必胜策略?


很简单的结论题。

如果 n5,Alice 把 n21 合成为 n2,则 Bob 只能合成两个 1,Alice 必胜。

n4 分别讨论即可。

B

题意:定义美丽序列为:可以选择一个前缀 i[1,n1],把前 i 个元素移到最后的位置(这 i 个元素相对顺序不变),使得新序列单调不减。

给出一个序列 {a} 和一个空序列 {b},遍历数列 {a} 并执行如下操作:

  1. 如果 {b} 中加入 a[i] 后,依然是美丽数列,输出 1 并在 {b} 中加入 a[i]

  2. 否则输出 0


美丽的序列应该满足下列条件至少一个:

  1. 单调不减;

  2. 由两个单调不减的序列拼接而成,且末尾元素 首位元素。

因此,我们用一个变量记录当前是否依然保持单调不减;如果已经不再单调不减,记录第一个单调不减的序列末尾位置,然后判断是否能加入新元素。

C

题意:给出一个由字母 A,B,C,D,E 组成的序列,每个字母依次代表 1,10,100,1000,10000。对于一个字符,如果它的右边有比它更大的字符,带负号;否则带正号。

整个序列的值就是每个字符对应的值乘以它的符号。

现在可以将一个位置上的字符更改,问:改后最大的值是多少?


考虑什么时候更改一个位置会更优。

  1. 增加。如果这个位置不是从左看第一个出现,一定不会最优,因为可以选择更左的同一个字符的位置。这样增加的量不变,且因增加字符而导致的减少不会增加。

  2. 减少,如果这个位置不是从右看第一个出现,一定不会最优,因为可以选择更右的同一个字符的位置。这样减少的量不变,且因减少字符而导致的增加不会减少。

所以,考虑更改每种字符出现的第一个和最后一个位置即可。

D

题意:给出 n 个区间 [li,ri],问:至少删除多少个区间,可以把区间两两分组,满足:

  1. 每组内的两个区间相交(只有一个点也算);

  2. 不同组之间的任何区间不相交。


考虑两个组 ([l1,r1],[l2,r2]),([l3,r3],[l4,r4]),如何判断四对区间(第一组和第二组各挑一个)都不相交?

转换思路

这个太麻烦了,不如换个思路:考虑 [l1,r1],[l2,r2][l3,r3],[l4,r4] 的并集:显然,因为组内相交,并集也是一个段。这两个并集不能相交。

妙蛙!!

把给出的区间中相交的都算出并集线段,现在的目的就是在这些所有的并集线段中找出最多不相交的线段。

这是贪心的经典问题。左端点排个序依次选即可。

E

有一个 nn 列的矩阵,行和列都从 1n 编号。对于第 i 列,第 1ai 个格子是黑色的,其余格子是白色的。

你可以把 1mm 个整数放到矩阵里,满足两条规则:

每个格子包含至多一个整数。

黑色格子不能包含整数。

一个矩阵的美丽程度是满足这样的格子个数:该格子自身包含一个数 j,且它右边与它相邻的格子包含的数为 j+1

请求出矩阵的最大美丽值。


每一列的黑色格子把每行分成了若干白色段。

考虑放下连续 k 个数字,就有 k1 个贡献。

可见,我们要尽可能选取较长的段,这样 1 的次数就会变少。

现在的问题变成:如何求出每种长度的段有多少种?

考虑第 1i 列的 1a[i] 行,以这些格子为右端点的白色段。(这里右端点其实是 i1 列,顶到了第 i 列的黑色格子)

以第 j 行第 i1 列的格子为右端点的最长白段 的左端点,显然最靠右的 a[x]j 的列 x 会 “拦下” 这个白段。

我们考虑用单调栈维护:

枚举 j1a[i],如果当前单调栈的顶元素对应列的黑格数量 a[top]j,则 第 top 列可以拦下这个白段,把对应长度的白段数量加一。

否则 a[top]<j,因为 j 是从小到大枚举,所以以后的 j 都不会使用这个 a[top];以后更新新的列也不会用到第 top 列,因为第 i 列不仅黑格更多,而且更靠后。于是直接 pop 掉。

补充

上面的过程其实可以简化:只要 topa[i],就直接 pop,在 pop 的一瞬间统计答案。

整个过程就只有维护单调栈的复杂度 O(n)

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