• 20200223(ABC)题解 by刘少瑞 杨熠辰


     A:
    给定一个图,图中有且仅有一个环,输出每个节点到环的距离。
    第一遍DFS,标记所有访问点并记录深度,若访问到已标记的点,则该点和它的父节点为环上的点,分别记为u,v
    第二遍DFS,从v触发,逆深度一直访问到u,这条路径上所有点即为环
    第三遍BFS,将环上所有点距离标为0,并挨个作为起始点进行BFS,求出来到其他点的距离
     
     B:
    不难发现,满足下列条件只一时皇后i可以吃掉皇后j
    r[i] = r[j]
    c[i] = c[j]
    r[i] + c[i] = r[j] + c[j]
    r[i] - c[i] + n = r[j] - c[j] + n (这里 +n 是为了避免出现负数)
    记录一下每 行/列/与对角线平行的直线 上的最左边与最右边的皇后位置,对于每个皇后,判断能否吃掉当前所在 行/列/与对角线平行的直线 两端的皇后即可,统计个数。
    即记录所有 r[i]/r[i] + c[i]/r[i] - c[i] + n 相同的皇后中 c[i] 的最 大/小 值,记录所有c[i]相同的皇后中 r[i] 的最 大/小 值。
    时间复杂度O(n)

    C:
    类似于求最大子矩阵的做法。
    首先求一个前缀和,用 sum1[i][j] 表示第 j 列的星星数量的前缀和,即
    sum1[i][j] = sum1[i - 1][j] + star[i][j]
    其中star[i][j]表示第 i 行第 j 列是否存在星星
    枚举上下边界 u/d 的同时枚举右边界 i,寻找能使区域内星星数量大于 K 个的左边界数目。
    具体做法为枚举 u/d 的同时再维护一个前缀和 sum2,用 sum2[i] 表示从 (u, 1) 到 (d, i) 范围内的星星数目,由于,那么我们只要是找到 sum2 中小于等于 sum2[i] - k 的数的个数就行了。
    由于前缀和递增,可以二分查找。
    时间复杂度 O(n^3logn)
  • 相关阅读:
    Codeforces Round #567 (Div. 2) B. Split a Number
    es界面的分组,求平均值的操作
    es界面的查询命令
    es界面的crud
    WebStorm中自定义文档注释模板
    Vue 正确理解mounted、beforeUpdate、updated三个钩子函数的关系
    oracle分析函数
    vue中时间格式的处理
    vue-router params和query的区别
    vue中的深拷贝理解和实现
  • 原文地址:https://www.cnblogs.com/QLU-ACM/p/12358987.html
Copyright © 2020-2023  润新知