AtCoder Beginner Contest 400 A-F题解

A - ABC400 Party

语法题。\(Ans = \begin{cases} -1,400 \bmod x \neq 0 \\ \frac{400}{x},400 \bmod x = 0 \end{cases}\)

B - Sum of Geometric Series

简单题,直接加,超过 \(10 ^ 9\)break,输出的时候注意是否大于 \(10 ^ 9\)

C - 2^a b^2

这个 \(n\) 很大,于是我们考虑 \(\Omicron(\log n)\) 的做法。我们可以枚举 \(2 ^ a\),则对于每个 \(a\),满足条件的数的个数为 \(\sqrt{\frac{n}{2 ^ a}}\)

但是这样有个问题,有的会算重。我们思考算重的条件,是 \(A = 2 ^ i \times a,B = 2 ^ i \times b,b = 2 ^ t a\),所以,偶数一定会被算重。则我们只统计 \(\sqrt{\frac{n}{2 ^ a}}\) 中的奇数个数就可以去重了。

这题卡精度,需要开 long double

D - Takahashi the Wall Breaker

对于每个格子,向上下左右分别连边,如果是 # 则权值为 \(1\),并且尝试再延伸一格,如果还是 #,就再连一条权值为 \(1\) 的边;如果为 .,则权值为 \(0\)

建完图直接跑 Dijkstra,跑的很快的。边权只有 \(0,1\),所以还可以跑 01BFS,但是赛时没想。

E - Ringo's Favorite Numbers 3

C 题因为精度卡太久了,不然这题赛时就能过了。

我们可以先筛 \(10 ^ 6\) 以内的质数,开一个 \(cnt\) 数组,对于每个质数,将其倍数的 \(cnt\) 加上 \(1\),这个是个调和级数,复杂度是 \(\Omicron(n \ln n)\),对于每一个 \(cnt = 2\) 的数,将它的平方加入 \(ans\)。回答一个 \(n\) 时直接在 \(ans\) 里面二分查找,总时间复杂度是 \(\Omicron(N \ln N) - \Omicron(Q \log N)\)

F - Happy Birthday! 3

直接做不好做,我们可以把题意的叙述反过来:

给定一个环 \(p\),一开始 \(p _ i = c _ i\),每次可以选择一个区间 \([l,r]\) 和一个颜色 \(k\),满足 \(p _ i = k \vee p _ i = 0\),以 \(r - l + 1 + x _ k\) 的代价,把 \(p _ {[l,r]}\) 设为 \(0\),求使得 \(\forall i,r _ i = 0\) 的最小代价。

一眼区间 DP,可以把 \(p\) 复制一份,就不用写环形 DP 了。然后设 \(dp _ {l,r}\) 表示使得 \([l,r]\) 等于 \(0\) 的最小代价。初始状态非常显然,\(dp _ {i,i} = x _ {c _ i} + 1\)

考虑转移,我们可以直接把两段拼起来,\(dp _ {l,r} = \min \{ dp _ {l,m} + dp _ {m + 1,r} \}\),也可以枚举交集长度为 \(1\),并集为 \([l,r]\) 的两个区间,也就是 \([l,m],[m,r]\),因为 \(m\) 在两个区间中被分别计算了一次,所以我们可以减去一次贡献,因此 \(dp _ {l,r} = \min \{ dp _ {l,m} + dp _ {m,r} - x _ {c _ m} - 1 \}\)

然后,我们还需要考虑左右颜色相等,可以一起操作的情况,则 \(dp _ {l,r} = \min \{ dp _ {l,r},dp _ {l + 1,r} + r - l,dp _ {l,r - 1} + r - l \}(c _ l = c _ r)\)

合起来转移,答案为 \(\min \{ dp _ {i,i + n - 1} \}\)

posted @ 2025-04-06 17:56  xguagua_233  阅读(66)  评论(0)    收藏  举报