ABC194 题解
[toc]
AC 代码
A – I Scream
B – Job Assignment
C – Squared Error
给定一个大小为 N 的数列 A ,求 ∑Ni=2∑i–1j=1(Ai–Aj)2 。
N≤3×105 。
转换一下:
N∑i=2i–1∑j=1(Ai–Aj)2=N∑i=2i–1∑j=1(A2i+A2j–2AiAj)=(n−1)n∑i=1A2i+∑i>j2AiAj=(n−1)n∑i=1A2i+n∑i=1Ain∑j=1Aj
O(N) 计算即可。
D – Journey
有一个 N 个点的图,Takahashi 初始站在点 1,他每次都有 1N 的概率跳到任意一个点,询问他遍历图上所有点的期望跳跃次数。
N≤105 。
假设当前 Takahashi 已经遍历了 i 个点,那么他下一次跳跃能够到达一个未曾遍历过的点的概率为 N−iN ,换算成期望就是 NN−i 轮,由于每一次的选择独立,累加即为期望。
E – Mex Min
给定一个大小为 N 的数列 A ,询问数列 A 中所有长度为 M 的连续区间中 MEX 的最小值。
M<N≤1.5×106,0≤Ai<N 。
考虑到我们扫过的区间一定是 [1,M],[2,M+1],… 这样的连续区间,因此每次换到下一个区间都相当于新加入一个数,然后再去掉一个数,可以直接用树状数组更新。查询 MEX 则考虑树状数组上倍增,求前 K 个数的和是否等于 K ,时间复杂度 O(NlogN) 。
F – Digits Paradise in Hexadecimal
给定一个长度为 N 的十六进制数字 S ,询问 [1,N] 的十六进制整数中有多少个数含有 K 种不同数字。
N≤2×105,K≤16 。
设 dp[i][j] 表示前 i 个数位严格小于 S 的前 i 位并且含有 j 种不同数字的数量,然后分两类讨论:
- 前 i−1 位已经严格小于 S 的前 i−1 位:
这种情况下,第 i 位可以随便选择,因此有两种不同转移:
{dp[i][j]=dp[i][j]+dp[i−1][j−1]×(16−j)dp[i][j]=dp[i][j]+dp[i−1][j]×j - 前 i−1 位恰好等于 S 的前 i−1 位:
这种情况下,第 i 位只能选择严格小于 Si 的数才能保证前 i 位严格小于 S 。
最终不要忘记特判一下 S 本身是不是答案就好了。
test
Hello world!