AtCoder Regular Contest 169

A - Please Sign

某个 AiA1 的贡献是 (10100depi),所以深度为 d 的节点的 Ai 之和只要不为 0,其贡献就一定远大于深度 <d 的所有点的贡献之和。

从大到小找到第一个和非零的深度即可。

B - Subsegments with Small Sums

直接考虑以每个位置为开头的段在答案中出现了多少次即可。

C - Not So Consecutive

直接 DP,设 fi,j 表示当前考虑了前 i 个位置,且第 i 个位置填的数是 j 的方案数。转移是

fi,j=max(lastj,ij)k<iljfk,l.

其中 lastj 表示最大的 k 使得 kiAk1Akj

前缀和优化一下,可以做到 O(N2)

D - Add to Make a Permutation

首先,假设我们不进行取模操作,设最后得到的数列是 B1,B2,,BN,那么只需要 BimodN 互不相同,即可满足条件。

考虑什么样的 B 是可以得到的。设 S=1iN(BiAi),需要:

  • BiAi
  • MS
  • BiAiSM

(赛时我漏了第三个条件,而且用的是另外一种做法,没法处理这个条件。)

然后发现最优的 B 序列有一些性质:

性质 1:假如 A 是递增的,那么最优的 B 是不降的。

证明:交换一对逆序的 Bi 不会使 S 改变,且会使得 max(BiAi) 变小。

性质 2:假如 A 是递增的,那么最优的 B 形如 [x,x+1,,x+N1]

证明:由于 B 是递增的且 BimodN 互不相同,所以只要 B 不是这样的,就一定存在 i,j 使得 Bj>Bi+N。此时令 (Bi,Bj)(Bi+N,BjN),再将 B 数组排序,得到的 B 一定更优。

于是我们只需要找到最小的 x,使得其对应的 B 序列是可以得到的。上面的第 1,3 条限制对应了 x 需要大于等于某个数;第二条对应了 xk(modMgcd(N,M)),其中 k 是某个数。

E - Avoid Boring Matches

怎么想到的???

首先考虑判定一个串 S 是不是 boring 的。

如果 SR 的个数大于一半,就一定是 boring 的。

  • 假如 S1=R,那么它和最后一个 B 配对一定是最优的;
  • 否则,它和它后面的第一个 R 配对是最优的。

这样就可以将长为 2N 的串以最优的方式缩成长为 2N1 的串。

考虑所有长为 2N 且不 boring 的串中,字典序最大的一个,设为 TT 可以通过反向模拟上面的贪心过程得到。有结论:

对于串 S,设 fS(i) 表示将 S 中的 R 看作 1B 看作 1i 位置的前缀和。

S 不是 boring 的,当且仅当对于每个 i,都有 fS(i)fT(i)

回到原问题,算出每个 fS(i),交换相邻的 R,Bf 的影响就是将 R 所在的位置 +2。并且,只要存在至少一个位置使得 fS(i)<fT(i),就一定可以将某个这样的位置 +2

所以答案就是

1i2Nmax(0,fT(i)fS(i)2).

F - Large DP Table

关键结论:

考虑两个点 (a,b),(c,d) 满足 ca,db。将 (c,d) 走到 (1,1) 的那条路径画出来,路径会穿过 Y=b 这条线(也就是说,Xa,Xa+1,,XN 中有某一个造成了一次贡献),当且仅当 minaicAi<minbidBi。否则,路径会穿过 X=a 这条线。

然后用单调栈随便做做即可。时间复杂度 O(N)

作者:alan-zhao-2007

出处:https://www.cnblogs.com/alan-zhao-2007/p/17896293.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Alan_Zhao_2007  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题