arc148 abcde 题解

A

B

C

题面

给你一颗有根树,每个节点是黑色或白色,初始全为白色。
每次询问给出一个点集 \(S\),把点集中的点全部染成黑色,问至少需要翻转多少个节点使整棵树全为白点,无解输出 \(-1\)

\[n\le 2\times 10^5 \]

翻转的定义为:将节点 \(u\) 及其子树中所有节点颜色翻转。

暴力做法:从父亲开始做,如果该点为黑色则翻转整个子树再往下做。

正解:父亲做一次,翻转整个子树,父亲的儿子状态也会改变,相当于对儿子的子树翻转一遍,所以改变状态的只有该点和其直接儿子。

D

题面

场上 \(2N\) 个整数, Alice,Bob轮流取数,Alice 先手,如果最终 Alice 取出的数字的和,与 Bob 取出来数的和,模 \(M\) 后的结果相等,那么 Bob 获胜,否则 Alice 获胜。

从最后开始想,设 A 取值为 \(x\), B 取值为 \(y\),剩下两个数分别为 \(a\)\(b\)

如果 B 获胜则必须满足:

\[x+a \equiv y+b \pmod M \]

\[x+b \equiv y+a \pmod M \]

两式相减得到 \(2a \equiv 2b \pmod M\),是 B 获胜的必要条件。

容易发现满足 \(2a \equiv 2b \pmod M\) 只有两种可能,要么本身相同,要么其中一个取模。

对于把他们两两分组,若取一组中的一个,则下一手取这一组的另一个,对于上面两种情况,第一种没有贡献,第二种使两个人的差增加 \(\frac{M}{2}\),所以第二种对数必须为偶数。

E

题面

给定长度为 \(n\) 的数列 \(\{a_i\}\) 和一个自然数 \(K\), 可以将 \(\{a_i\}\) 打乱顺序重排,问多少种结果序列满足 \(\forall i \in [1,n), a'_i + a'_{i+1} \ge K\)。 答案对 \(998244353\) 取模。

\[n\le 2 \times 10^5 \]

\[0 \le a_i,k\le10^9 \]

神奇题。

分成两类,一类大于等于 \(\frac{k}{2}\),一类小于,这里除法是保留小数而非向下取整,因为是方案数有相同,要先去重。

两条限制:

  • 两个属于第二类的数不能相邻。

  • 对于一个第一类的数和一个第二类的数,设 \(y \ge \frac{k}{2}\)\(x < \frac{k}{2}\) 则有 \(|y-\frac{k}{2}|\ge|x-\frac{k}{2}|\)

按上面绝对值排序,相同则第一类优先,这样就能处理第二个限制,处理第 \(i\),分两类做。

设该类数的个数为 \(cnt\)\(s\) 为现在可放的位置。

  • 第二类的数

因为两两间不能相邻,所以方案数为 \({s}\choose{cnt}\)\(s\) 减去 \(cnt\) (接下来不能放这个数旁边)。

  • 第一类的数

两两间可以相邻,而且前面第二类数不能相邻,同上,所以方案数为 \({s+cnt-1}\choose {s-1}\)\(s\)\(cnt\) (接下来的数可以放在这个位置)。

posted @ 2024-03-12 21:39  point_fish  阅读(29)  评论(0)    收藏  举报