• AtCoder AGC #3 Virtual Participation


    Havana真好听qwq

    AB题就不写了 SB

    C.BBuBBBlesort!

    有一个长度为$n$的数列

    你每次可以用两种操作

    1.交换两个相邻元素

    2.交换两个隔且仅隔了一个的元素

    求把数列排成有序的,最少需要多少1操作

    sol:显然,2操作并不会改变排序后元素所处位置的奇偶性

    我们找到所有排序后位置与现在位置差为奇数的点,再除以2就可以了

    D.Anticube

    给出$n$个两两不同的数,选出一些数使得不存在两个数的积是完全立方数,求能选出的最大数量

    sol:套路

    把每个数分解质因数,求出他们每个质因数次数膜3的值

    然后每次选择两个“互补”的数中较大的那个数就可以了

    因为数不超过${10^{10}}$,可以用不超过${10^{frac{10}{3}}}$的质数来筛

    筛掉的这些数可以求出最简表示和补数

    剩下的数都可以分成不超过两个质因子

    然后就完全平方判一下就可以了

    E.Sequential operations on Sequence

    一个由$1,2,3,4,...,n$组成的数列,有$Q$次操作,每次操作包含一个$q_i$表示将数列无限重复,然后取前$q_i$项组成一个新的数列

    $q_i leq 10 ^ {18}$

    求最后数列中$1$到$n$各出现了多少次

    sol:

    首先,如果前面的$q_i$大于后面的,那肯定是一次无效操作,我们可以删去

    于是$q_i$递增

    然后...就是神仙操作了

    我们记一个$f_x$表示“第$x$次操作后的序列在最后的序列中出现了多少次”

    显然,第$i$次操作后的序列肯定是由很多次第$i - 1$次操作后的序列加上一段第$i - 1$次操作后的序列的前缀组成

    完整的部分显然是可以直接拿$f_{x- 1}$转移到$f_x$的

    考虑剩下的一段前缀

    剩下的一段前缀,肯定是由$x - 1$之前的某个操作后的序列搞出来的

    我们可以二分这个序列是第几次操作后的序列

    二分得到一个$ans$,它会对这个前缀产生一些贡献,可能还会再剩下一些

    但剩下的不会超过$len(prefix)$ % $len(sequence(ans))$

    然后就是一个结论,一个数膜一个比它小的数,最多膜log次

    于是就是$O(log^2n)$的

    F.Fraction of Fractal

    给你一个黑白图案和一个分形次数$k$

    每次分形是用$k-1$次分形当做“黑格”,大白方块当做“白格”如初始图案那样拼起来

    问最后有多少黑色连通块,取膜

    $k leq 10^{18}$

    sol:

    这么大 矩阵快速幂

    比上一题好想一点...

    我们设$x$为初始黑块数

    首先,如果分形边界没有黑格,直接就是$x^{k}$

    只有当它上下左右连通的时候才会产生影响

    1.如果全都连通,直接就是$1$

    2.如果仅有上下连通或者左右连通

    因为旋转90度的话这两个就是一种情况了,我们现在只考虑左右连通的情况

    我们可以dp

    $f[i]$表示$i$阶分形黑色连通块数量

    $g[i]$表示$i$阶分形有多少个联通块满足,当它跟它的复制左右拼起来时会和一个联通块连在一起

    转移就是$f[i] = f[i - 1] * x - g[i - 1] * w$

    然后$g[i] = f[i -1] * y$

    $w$表示原图中有多少对左右相邻的黑格

    $y$表示原图中最左边一列和最右边一列拼起来有多少黑色相邻

    这样就是一个齐次递推式,我们可以矩阵乘法

     

  • 相关阅读:
    线程池进程池
    设计原则与设计模式
    腾讯阿里第三方接入
    计划任务
    系统服务
    Python Faker模块
    Python openpyxl模块
    Python-docx模块
    进程管理
    磁盘管理
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/9676621.html
Copyright © 2020-2023  润新知