博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

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)$的

posted @ 2021-12-04 14:22  gllonkxc  阅读(99)  评论(0编辑  收藏  举报