Atcoder ABC397 题解
ABC397
A
直接判温度在哪个区间内即可。
B
因为 \(s\) 的长度只有 \(100\),所以直接暴力地循环,每轮找到第一个不符合要求的字符,在它前面插入 i 或者 o 即可,显然插入有 \(O(n)\) 轮,故总时间复杂度 \(O(n^2)\)。
C
省流:F 的弱化版。
我们算出一个 \(pre\) 数组和一个 \(suf\) 数组,表示一个前(后)缀的不同数字个数。对于 \(pre\),显然有:
其中中括号运算符表示,若其内命题为真,则值为 \(1\),反之为 \(0\)。
\(suf\) 的计算同理。
这个【没出现过】可以用一个桶动态统计。
计算答案,就是枚举分割点,\(\max_{i=1}^{n-1} pre_i+suf_{i+1}\)。
时间复杂度 \(O(n)\)。
D
由立方差公式,令 \(t=x-y\),我们有:
我们可以枚举 \(t\),由上式,\(t \le \sqrt[3]{n}\),故 \(t\) 只需要枚举到 \(10^6\)。
有了 \(t\),自然可以算出 \(xy = \frac{\frac{n}{t} - t^2}{3}\)。而又有 \(y=x-t\),直接二分 \(x\)(解方程)即可。
时间复杂度 \((V^{\frac{1}{3}} \log V)\),其中 \(V\) 为值域。
submission.
E
我们记 \(f_u\) 为在以 \(u\) 为根的子树的一个合法的剖分中,\(u\) 所在的链的大小。(若这个链包含 \(u\) 的祖先,不计算在内)
我们做树形 DP,\(S\) 为 \(u\) 的所有儿子 \(v\) 中,满足 \(f_v \ne k\) 的 \(v\) 的集合。这些 \(v\) 无法在子树内把链补完整到 \(k\),所以必须向上延伸。
如果 \(|S| \ge 3\),那么这三个儿子都要往上延伸,但是 \(u\) 最多连接两个点。所以无解。
如果 \(|S| = 2\),那么两个儿子都要和 \(u\) 连接。如果 \(f_{v_1}+f_{v_2}+1 = u\),则合法(\(+1\) 代表把 \(u\) 算上),\(f_u \gets k\);否则就无解。
如果 \(|S| = 1\),这个儿子要和 \(u\) 连接。此时 \(u\) 还有一个活头,可能需要继续向上延伸。\(f_u \gets f_v + 1\)。
如果 \(|S| = 0\),那么 \(u\) 所在的链目前只有 \(u\) 一个点,\(f_u \gets 1\)。
最后保险起见,判一下 \(f_1\) 是否为 \(k\)。
时间复杂度 \(O(n)\)。
F
省流:CF833B The Bakery 严格弱化版,就是 \(k=3\)。
见 CF833B The Bakery 题解。
G
不会。

浙公网安备 33010602011771号