AtCoder Beginner Contest 230
solved: 5/8
A
如果x>=42那就++, 然后输出补全为三位数有前导0的x
B
模拟
C
模拟
D
先按右端点升序排序, 再按左端点升序
可以发现每一拳都打在右端点是最优的, 证明的话可以发现, 假设我有某一拳打中间, 前面已经全部被摧毁了, 覆盖到后面的区域肯定不如右端点广
然后贪心地打拳就可以了
E
整除分块, 对于$\lfloor \frac{n}{i} \rfloor$, 可以发现他的值是一段一段连续的, 下降的
这个值也是可以算的, 假设当前枚举到i, 那么和i的值相同的区间就是覆盖的区间就是$[i, \frac{n}{\lfloor \frac{n}{i}\rfloor}]$
当前的值是$\lfloor \frac{n}{i} \rfloor$, 设为x, 那么满足$\lfloor \frac{n}{R} \rfloor=x$的最大的R就是$\lfloor \frac{n}{x} \rfloor$
$ix \leq n, R=max(i), R=\lfloor \frac{n}{x} \rfloor$
补题: 2/3
F
设f[i]为前i个的答案, 那么新增一个数, 相当于把第j=0~i-1往后的所有数跟i合并
考虑重复的情况, 可以发现只有这种情况000->00 或者000->00只有这种情况会出现重复
那么对于前缀和同为j,k的两个位置, 我们只需要传k的答案, 因为k可以从j的答案那里来(默认从后到前合并 也就是上面的那种情况我们只统计后面那种)
然后, 需要特判前缀和为0的情况, 此时, 我们把所有数合并到0上是合法的, 也就是空集是合法的(对于后面的合并有贡献), 而这样会被我们忽略掉, 所以应该+1
然后, 到了输出, 需要判一下, 全局都为0的情况, 此时会把空集的状况算上
G
基于莫比乌斯函数的容斥
先保证gcd(i, j)>1, 也就是枚举x, 使得i=ax, j=bx, 用莫比乌斯函数来容斥, 计算满足gcd(pi, pj)>1的对有几个(因为此时已经满足i,j不互质了)
然后对于pi, pj, 我们再用一次莫比乌斯函数, 把每一个pi分解, 对于其他的数, 只要含有他的因数, 那就是跟他互质
但是 对于12 6 24 他们都既是2的倍数, 又是3的倍数, 因此需要再用一次莫比乌斯函数来容斥
效率是$O(NlnN+Nlog_2N)$的