• 2021“MINIEYE杯”中国大学生算法设计超级联赛 第一场 题解


    题目链接
    https://acm.hdu.edu.cn/contests/contest_show.php?cid=984

    A

    简单结论题

    B

    Pro:
    依次向平面添加(n)个点
    (i)个点会对其半径(r_u)的范围内的所有点(j)造成(v_j)的损失。
    求加入每个点后的损失和。
    保证数据随机

    Sol:
    1.
    kd-tree硬冲即可。
    2.
    考虑把平面分块(70*70),把每个点丢到对应的块中。每次暴力枚举所有的块。
    块被分为三种,完全覆盖,部分覆盖,无覆盖。
    完全覆盖和无覆盖直接统计,部分覆盖的枚举块内所有点统计答案即可。

    C

    Pro:
    给定一张网格图
    选出一些边,使得构成若干个边不相交的封闭环。
    求每个格子对其四个相邻边选择数量的奇偶有限制。
    求方案数。

    Sol:
    容易发现只需保证所有点度数为偶数即可。
    故所有限制均可转化为异或方程组,高斯消元求秩即可。

    D

    不会

    E

    CCPC2020网络赛原题

    F

    Pro:
    求区间异或和(>=k)的最短区间

    Sol:
    限制:(S_r xor S_{l-1}>=k)
    考虑枚举右端点,(Trie)树维护答案。
    具体实现在(Trie)上按位贪心即可。

    G

    Pro:略

    Sol:
    可以列出(x)关于(n)(t)的方程。
    使用(bsgs)求解即可。
    由于式子中含有(-1)^t,需要分奇偶讨论。

    H

    Pro:
    求面积最大的每一列都单调递增的子矩阵。
    Sol:
    预处理每个位置最多能向上延伸多高。
    枚举下边界,单调栈求解即可。

    I

    (kruskal)搞一搞

    J

    Pro:
    二维平面(n)个点形如((i,f[i]))
    多次询问一个矩形内所有的点有多少种(y)坐标。

    Sol:
    首先有一个比较蠢的树套树的(log^2n)的做法,不多赘述。
    考虑莫队,瞎做的话是直接套一个树状数组,(O(n*sqrt(n)*logn))

    瓶颈在于维护一个可重集合,
    支持插入数字,删除数字,统计区间[l,r]内至少出现过一次的数字个数。
    树状数组的话(logn)
    写的比较好可以直接硬冲过去。

    考虑莫队有(O(n*sqrt(n)))次修改,(O(n))次询问。

    现有的做法是修改和询问都是(O(logn))
    实际上,不难实现一个修改(O(1)),查询(O(sqrt(n)))的值域分块的做法。

    复杂度降为(O(n*sqrt(n)))

    K

    Pro:
    一个长度为(n)的项链,用红蓝绿三种颜色染色,相邻颜色不能相同,绿色最多(k)次,旋转同构。
    求方案数。

    Sol:
    (Burnside)一下

    //对于转动(i)次的置换,环长为(frac{n}{gcd(i,n)}),等价类个数为(gcd(i,n))

    [egin{align*} ans&=frac{1}{|G|}*sum c(g) \ &=frac{1}{n}*sum f(gcd(i,n)) end{align*} ]

    f(x)表示长度为(x)的环,用三种颜色染色,相邻颜色不能相同,绿色的个数不超过(frac{x*k}{n})个的方案数。
    对于(f(x)),不妨枚举绿色的个数。
    即设(f(x)=sum g(x,k))
    计算(g(x,k))需要大力分类讨论一下情况。
    1.第一个位置为绿色:
    考虑先选择哪些位置放绿色。
    问题等价于把(x-1)-(k-1)的序列分为k段,要求每一段都不为空。每一段中只要确定第一个位置是红色还是蓝色,剩下位置颜色确定,故需要额外乘上一个系数。
    插板法:(C(x-k-1,k-1)*2^{k})
    2.第一个位置不为绿色:
    做法类似
    (C(x-k,k)*2^{k})

    综上,我们得到了(ans)的表达式

    [egin{align*} ans&=frac{1}{n}*sum f(gcd(i,n)) \ &=frac{1}{n}*sum_{i=1}^n sum_{t=0}^{frac{x*k}{n}} 2^t*(C(x-t-1,t-1)+C(x-t,t)) 其中x=gcd(i,n) \ &=frac{1}{n}*sum_{x|n} cnt_x* sum_{t=0}^{frac{x*k}{n}} 2^t*(C(x-t-1,t-1)+C(x-t,t)) 其中cnt_x表示gcd(i,n)==x的i的数量 end{align*} ]

    这个式子的暴算的复杂度是小于等于(n)的所有约数的和的,而(n)的约数和大概是(5n)左右,暴力计算即可。

  • 相关阅读:
    Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
    DockOne技术分享(二十):Docker三剑客之Swarm介绍
    最佳实战Docker持续集成图文详解
    Spring Cloud Netflix Eureka源码导读与原理分析
    JVM内存区域的划分(内存结构或者内存模型)
    深入理解JVM(一)——JVM内存模型
    java多线程有哪些实际的应用场景?
    深入理解Java类加载器(1):Java类加载原理解析
    【深入Java虚拟机】之四:类加载机制
    OAuth 2和JWT
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/15083173.html
Copyright © 2020-2023  润新知