• Global Round 1 题解(1110A~F)


    (Global Round1)题解(1110A~F)

    (zhanglichen 2021.1.2)

    (A.Parity)

    给出(2)个数字(b,k)

    给出一个长度为(k)的数组,询问(sum_{i=1}^na_i*b^{k-i})的奇偶性。

    (Solution)

    简单模拟,(C)语言月考。

    (B.Tape)

    给出以根长度为(m)的木棍,上面有(n)个断点。你可以截取(k)个任意长度的碎片把端点接起来。对于一个长度为(x)的碎片,如果把它放在位置(p),那么它会覆盖(p)(p+x-1)位置的所有端点。询问碎片的最小总长度。

    (Solution)

    建一个断点的差分数组,从大到小排序,然后贪心的取前(k-1)个差分元素空出来即可。

    (C.Meaningless Operation)

    给出一个范围是([0,2^{25}-1])的正整数(a),请你找到(1)个正整数(b(0<b<a)),使得(gcd(aoplus b,a&b))的值最大。

    (Solution)

    首先提取出(a)的二进制形式。

    如果存在一个(0)位,比如(111101111),那么我们可以把(b)设为(000010000),答案是(111111111),显然这是最优解。

    现在考虑不存在(0)位的情况。由于(a)不存在(0)位,我们要求的值可以转化为(gcd(b,a-b))。答案就是(a)的最大因数。

    (D.Jongmah)

    给出以一个数组(a)(1)个三元组((a,b,c))称为合法:

    (1)(a=b)(b=c)

    (2)(a+1=b)(b+1=c)。即((a,b,c))可以构成一个顺子。

    (Solution)

    假设我们当前枚举到的元素值为(x),那么它对答案的贡献可以有以下(3)种:

    ((x,x,x))

    ((x-2,x-1,x))

    ((x-1,x,x+1))

    ((x,x+1,x+2))

    考虑一个(dp)的思路。

    定义状态(f(i,j,k,l))表示到第(i)个元素为止,第(i)个元素,有(j)个作为第(2)种状态被统计,有(k)个作为第(3)种状态被统计,有(l)个作为第(4)种状态被统计时对答案的贡献。并且只需要统计(j<3)(k<3)(l<3)

    的情况即可。因为(3)((x,x+1,x+2))(x,x+1,x+2)各取三个对答案的贡献是一样的。

    状态转移方程:(f(i,j,k,l)=max(f(i-1,?,j,k))+l+(c[i]-j-k)/3)

    最后取(max(f(m,i,0,0)))为答案。

    (E.Magic Stone)

    给出(2)个长度为(n)的数组(c)(t),一次操作可以把(c_i=c_{i+1}+c_{i-1}-c_i),同时保证位置(i+1)和位置(i-1)合法。

    询问是否可以通过一些操作把(c)变成(t)

    (Solution)

    性质:不停的做这个操作,只是把差分数组打乱。

    所以建立(c)(t)的差分数组并排序,询问是否一样即可。前提要保证(c_1)等于(t_1)(c_n)等于(t_n)

    (F.Nearest Leaf)

    给出一棵带边权的树,请你根据以下代码给每个节点重新编号:

    next_id = 1
    id = array of length n filled with -1
    visited = array of length n filled with false
    
    function dfs(v):
        visited[v] = true
        id[v] = next_id
        next_id += 1
        for to in neighbors of v in increasing order:
            if not visited[to]:
                dfs(to)
    

    多次询问,每次询问给出三个数(v,l,r),表示询问从节点(v)到节点编号在(l)(r)之间的叶子节点的最短距离。

    (Solution)

    根据(DFS)序的性质,一个节点(x)的子树区间是(x)(x+size[x]-1)

    可以考虑对询问离线,(v)相同的询问一组。

    然后先构建出一个数组(d),表示节点(1)到所有叶子节点的距离。然后考虑搜索的时候修改(d)数组并回答询问。

    假设当前搜索到的节点是(x),从(x)转移到(x)的儿子(y)(y)的子树区间的所有元素(-1),除了(y)子树区间的所有元素(+1)。这样数组(d)存的就是(y)到所有叶子节点的距离。

    回答每个询问,就找(d)(l)(r)之间的最小元素。

    区间修改+区间询问,显然可以用线段树维护。

    神秘(Bug):线段树要开到(n+1),不然会报错,不知道为什么。

    (G.Tree-Tac-Toe)

    树上有些节点已经被染成白色了。先手可以把树上未染色的节点染成白色,后手可以把树上未染色的节点染成黑色。当有一方把树上一个长度为(3)的路径染成自己的颜色时胜利。

    询问在双方都足够聪明的情况下,谁能赢。

    (Solution)

    为了方便讨论,先把已经被染色的节点转化成未染色的节点。

    对节点作这样的构造可以实现未染色并且不影响胜负的效果。

    如果存在一个度数大于(4)的点,先手必胜。

    如果存在一个度数为(3),并且(2)个儿子不是叶子的点,先手必胜。

    如果存在(2)个度数为(3),且之间距离是奇数的点,先手必胜。

    否则平局。

  • 相关阅读:
    xtrabackup增量备份mysql +MHA
    mysql备份恢复中的常见错误
    MySQL 面试题目
    Amoeba for MySQL 中间件
    [MySQLCPU]线上飙升800%,load达到12的解决过程
    pt-kill--- MySQL数据库CPU飙升紧急处理方法
    MySQL 5.7并行复制时代
    淘宝内部分享:怎么跳出MySQL的10个大坑
    Percona XtraBackup User Manual 阅读笔记
    淘宝内部分享:MySQL & MariaDB性能优化
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14224041.html
Copyright © 2020-2023  润新知