AtCoder Regular Contest 185

保龄选手来写下记录。

A#

由于 N<M,所有 i 在模 M 意义下互不相同。

这说明如果一个人至少有两张牌,当前回合一定不会输。

b 为 Bob 的最后一张牌。

Alice 打出最后一张牌后局面达到 N(N+1)b。当且仅当 bN(N+1)(modM),Bob 胜。

c=N(N+1)modM

  1. c[1,N]

    如果 Bob 一直将 c 保留到最后,他就赢了。

    • Bob 手中牌数 3

      可以用除 c 外的另外两张来保证自己不会输。

    • Bob 手中牌数等于 2

      设 Alice 打出最后一张牌为 a

      则 Bob 倒数第二轮不打 c 能达到的局面为 N(N+1)aca0,不会输。

  2. c[1,N],无论如何 Bob 都不会赢。

submission

B#

定义一个非降序列是「好的」当且仅当序列极差不大于 1

结论:答案合法当且仅当他能操作为一个好的序列。

充分性:好序列也是非降的。

必要性:任意非降序列都能操作为一个好序列:

  • 每次找到靠的最近 i<j 满足 AjAi2,一定有 Ai<Ai+1,否则 i+1 更靠近 j,同理 Aj1<Aj
  • 操作后仍然满足 AiAi+1Aj1Aj
  • 不断操作直到找不到 i,j(极差不大于 1)。

最后能转化为的好的序列是唯一确定的,设为 B

ai=j=1iAj, bi=j=1iBj

非法当且仅当存在 ai>bi

一次操作 i,j 会使 [i,j) 的前缀和加一,(j,n] 的前缀和不变,即始终满足 i, biai

必要性显然,考虑充分性。

不妨将一次操作当成 B 前缀和上的区间加,如果任意 biai,最朴素的构造即对 (i,i+1) 操作 biai 次。

submission

C#

f(x)=[Ai=x], g(x)=[i<jAi+Aj=x]

g 可以通过 ff 再减掉点东西得到。

枚举 1in,判断是否存在 (j,k), j<k 对使得:

  • ijik
  • Ai+Aj+Ak=X

一旦我们知道 (j,k) 是否存在,即可用 O(N) 的时间找到一组解(枚举 j,至多枚举三个 Ak=XAiAj)。

考虑计算 (j,k) 的个数:

g(XAi)(f(X2Ai)[3Ai=X])

即所有 j<k, Aj+Ak=XAi 的方案减去 i 为其中之一的方案。

时间复杂度 O(N+VlogV)。(NTT模数取1374389534721)

submission

D#

不妨先考虑 M=1

把一次「根 叶子 根」称为一轮循环。我们显然是要求走完所有叶子的期望步数。

假设当前已经走过 i 片叶子,到一个新叶子需要走期望 NNi 轮。

最后答案即 2(i=0N1NNi)1,减 1 是因为最后一片叶子不需要回到根。

考虑一般的 M,我们仍然只关心叶子的覆盖情况。

e 表示从根随机游走到一片叶子的期望步数,答案可以简单的表示为 e(2(i=0N1NNi)1)

问题抽象为:深度从 i=0,每次等概率使 ii+1ii1, (i>0),第一次 i=M 的期望步数。

fi 表示从 i 期望向 i+1 走了多少步,gi 表示 i+1 期望向 i 走了多少步。

那么 e=fi+gi

对于任意 i,有 fi=gi+1

对于 i=M1,有 fi=1, gi=0

对于 i[1,M1],每个点等概率决策是往上还是往下,因此 gi1=fi

可以递推出 fi=Mi, gi=fi1e=M2

submission

E#

首先有朴素 DP:

fi=j=1i1fj+2j1gcd(ai,aj)

注意到

gcd(n,m)=dgcd(n,m)φ(d)=dndmφ(d)=dn[dm]φ(d)

f 部分先不管,最后加一个前缀和即可:

=j=1i12j1dai[daj]φ(d)=daiφ(d)j=1i1[daj]2j1

同时维护 g(d)=daj2j1,时间复杂度 O(VlnV+Nd(V))

submission

posted @   Lu_xZ  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示