三月Atcoder做题记录

AT_arc_164_a

题意描述

给定 \(n\)\(m\),判断 \(n\) 是否能够表示成 \(m\)\(3\) 的整数次幂之和。

简要题解

\(n\) 转化成 \(3\) 进制,计算每个数位和 \(sum\),因为每个数位的贡献是 \(3\) 的整数倍,每次增加一个指数会带来 \(2\) 的贡献,则 \(sum\le m \le n\)\(2|(m-sum)\) 就符合题目条件。

AT_arc_164_b

题意描述

给你 \(n\) 个点 \(m\) 条边的无向图,每个点的颜色或黑或白,每次可以从一个颜色的节点走向另一个颜色的节点,问是否可以从任意一个点开始走至少1次后回到开始节点。

简要题解

如果存在符合条件的路径,一定是一个有一条边两端的颜色相同,其余的颜色黑白相间的环。用并查集维护所有黑白相间的边,然后判断颜色相同的边的两端是否有相同的祖先即可。

AT_arc_164_c

题意描述

Alice和Bob用 \(n\) 个两面都有数字的卡片做游戏。每一轮Alice可以将一个卡片翻转,Bob可以拿走一个卡片并得到这个卡片朝上的数字分数,请问Bob最多能得多少分?

简要题解

有一个贪心的结论:Bob可以得到 \(n\)\(n-1\) 的最大分数,判断 \(n\)\(n-1\) 的关键是开始有偶数个大数在正面,那么就是 \(n\),反之就是 \(n-1\)

AT_arc_164_d

题意描述

\(n\)\(+1\) 电荷和 \(n\)\(-1\) 电荷,每个电荷都会向在左边和右边中与自己不相同的电荷个数最多的一边移动,如果两个不同的电荷碰到了一起就抵消了。现在给你 \(2n\) 个字符,其中有些电荷不知道是 \(+\) 还是 \(-\),请对所有可能的答案求出每个电荷移动距离的和的和。

简要题解

考虑令 \(dp[i][j]\) 表示前 \(i\) 个数,\(+1\)\(-1\) 的差值为 \(j\) 的方案数,\(sum[i][j]\) 为答案,方案数很好求,对 \(+,-,?\) 分类讨论即可。(当然 \(sum[i][j]\) 同理)考虑 \(dp[i][j]\)\(sum[i][j]\) 的贡献,有 $sum[i][j] \leftarrow dp[i][j]*|j| $。因为其中有 \(j\) 个没有消掉的电荷,每个电荷都可以向右移动 \(1\) 格。

AT_arc_164_e

题意描述

\(Q\) 个区间 \([L,R]\)。你需要构造一个二叉树,满足每一个非叶子节点一定有两个子节点,如果一个非叶子节点对应 \([i,j]\),那么它的两个子节点可以为把这个区间任取拆成2个区间,其余与线段树相同。你需要在保证在 最大深度最小的条件下每个点访问次数最小。

简要题解

考虑先把这些区间给分成若干个互不相交的区间,那么第一问的答案就是 \(\lceil \log_2t \rceil\),其中 \(t\) 为区间个数。
考虑对于一个区间(这些区间一定是叶子结点),我们要么把它放在下面,要么新建一层和相邻的区间合并。记 \(dp[i][j]\) 表示前 \(i\) 个区间,上一层有 \(j\) 个区间的贡献最小值。转移就是 \(dp[i][j] \leftarrow dp[i-2][j-1]+2*(cnt_l[cur[i]]+cnt_r[cur[i]-1])\)

AT_arc_164_f

给出了一个 N 个点的树,以 1 为根。

  • Alice 是先手持白棋,Bob 是后手持黑棋。
  • 若 u 无棋子且其儿子都有棋子,则可以放。
  • 在 u 放棋子时,子树内棋子颜色反转(u 不变)。

Alice 希望白棋最多,Bob 希望黑棋最多,双方都采取最优策略,问白棋数量。

简要题解

一棵树上每个棋子的最终是黑或者白只和这个节点的深度有关。我们把到根的距离为奇数的点染成蓝色,为偶数的染成红色。我们对每个以红色节点为根的子树进行判断:

  • 如果这个点是叶子节点,把它看成一组;
  • 如果这个点的父亲有至少 \(2\) 个孩子,那么把这个点以及它的子树看成一组;
  • 找到“一组”后把这一组在树中删去。

最后你会得到很多组,以蓝色节点数量排序,因为对于每一组,先手都会把蓝色节点取完,所以轮流计算每一组的蓝色节点对答案的贡献即可。

posted @ 2025-03-31 12:02  reinforest  阅读(33)  评论(0)    收藏  举报