AtCoder Regular Contest 185 题解

A - mod M Game 2

第一个观察是如果一个人手中还有 2 张牌,那么他一定不会被秒。

这可以推出决定胜负的时刻一定是 Alice 和 Bob 手中只剩一张牌的时候,此时如果 Alice 被秒了,那么她就似了,否则她就赢了。

考虑 Alice 什么时候能被秒。记决定胜负的时刻 Alice 手中的牌是 a,Bob 手中的牌是 b,那么 Alice 被秒的必要条件就是 bN(N+1)(modM),不妨去证明它也是充分的。

  • 1N(N+1)modMN,此时 b=N(N+1)modM。当 Bob 有 3 张牌时,他可以留着 b 这张牌不出;当 Bob 有恰好 2 张牌时,若 Bob 留着 b 不出,那么此时牌的和为 N(N+1)ab,不难发现它一定不会是 M 的倍数,所以 Bob 可以留着 b 不出。由此可知,Bob 一定能赢。
  • 否则,Bob 一定输。

可以 O(1) check。

B - +1 and -1

关键性质:操作不会改变数列的和。

sum=iAi
我们可以构造一个新序列 A,满足 i[1,nsummodn],Ai=sum/ni[nsummodn+1,n],Ai=sum/n

大胆猜测,如果 A 能调整成不降的序列,那么 A 一定能调整成 A
这显然是正确的,因为我们可以对 A 调整成的不降的序列贪心调整。

所以只需要 check A 是否能调整成 A 即可,这个可以贪心判断。

时间复杂度 O(n)

C - Sum of Three Integers

枚举 i,然后就转化成了寻找 j,k 使得 aj+ak=Xai

先考虑如何判断可行性。
F(x)=i=1nxai,G(x)=F2(x)i=1nx2ai,那么 [xXai]G(x),就是 j,k 的方案数。
然后暴力判断即可,注意实现,不要多次进循环。

时间复杂度 O(VlogV+n)

D - Random Walk on Tree

先考虑 m=1 的情况,此时图是一个菊花。
我们走过的路一定是从 0 走到叶子,然后再返回根,记这为一次 round trip。
考虑如果已经染了 i 个叶子,此时还需要的 round trip 次数为 NNi
所以答案为 2(i=0N1NNi)1(最后一次到叶子无需返回)。

对于 m1 的情况,发现一次 round trip 的期望步数为 2m2(多分支不影响 round trip 的步数),那么可以得到答案为 m2 乘上 m=1 的答案。

时间复杂度线性。

E - Adjacent GCD

考虑从小到大枚举 i,计算答案的变化量。

首先原本的答案会乘 2,因为可以把原本的 Ai 状态取反形成新的状态。
然后要计算 Ai 的贡献,即 j<i2j1gcd(Aj,Ai)

考虑维护每个值的贡献系数 ki,那么就转化为了求:

i=1nkigcd(i,x)

直接上欧拉反演:

i=1nkigcd(i,x)= i=1nkidgcd(i,x)φ(d)= dxφ(d)diki

这样就能做到 O(nd(n)) 了。

posted @   definieren  阅读(22)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起