zoukankan      html  css  js  c++  java
  • 2019 Multi-University Training Contest 6


    A.Salty Fish

    upsolved

    题意 偷苹果,每个节点上有(a[i])个苹果,在某些位置有摄像机,看管子树里距离不超过(k[i])的节点,损坏摄像机有(c[i])代价,求最大收益。

    做法 听说这题长链剖分,然后我立马去瞅了题解。

    • 妙哉,长链剖分贪心优化最大流
    • 抛开树形结构,这题是个标准的最小割套路题
    • 最小割=最大流,那么考虑在树上贪心的求最大流
    • 自底向上,对于每个摄像机优先流距离更远的节点,这样把更多的机会留给祖先,深度越低,祖先越容易流到
    • 然后长链剖分套个(map),维护高度信息
    • 而且(map)居然也有(lower_{-}bound()),学到了

    B.Nonsense Time

    solved by F0_0H 208min -2

    题意 给定一个排列,初始全自闭,然后每个位置依次响应,求每个时刻的(LIS), 数据保证随机

    做法

    第一弹

    • 先上一个暴力做法
    • 可以想象,最终答案一定为很多段连续的依次递增的相同数字组成
    • 然后开始二分每个交界处的边界
    • 复杂度(O(n*sqrt_N*log_N*log_N)),稳T

    第二弹

    • 整体二分
    • (solve(l, r, ansl, ansr)) 表示区间([l, r])的答案在([ansl, ansr])范围内
    • 然后根据((l + r) / 2)位置的答案分治处理
    • 终止条件为(l==r)(ansl == ansr)
    • 可以大胆猜测,这样的复杂度为(O(能过)),少点常数就能卡过去

    E.Snowy Smile

    solved by F0_0H 67min -2

    题意 二维平面n个带权的点,求用一个矩形框住的最大权值和

    做法 扫描线加线段树动态查询最大子序列和


    F. Faraway

    solved by sdcgvhgj 230min -1

    题意 求满足((|x_i−x|+|y_i−y|)mod k_i=t_i)的解的个数
    做法

    • 观察到(2≤k≤5,lcm(k_i)≤60),所以每各60一循环
    • 将平面分成(n^2)块,对每一块枚举(x\%60)(y\%60)的值,判断是否满足等式,统计个数,复杂度(60^2n^3)
    • 用了1h来debug才过,竟是因为少模了,这种题冷静看一遍代码胜于无脑写对拍呀!

    D.Speed Dog

    upsolved

    题意 两个人分配代码长度,要求总和的最大值最小

    做法

    • 首先两个人的代码长度一定相同,不然不是最优
    • 考虑对于(a[i] <= b[i]),先贪心地将(a[i])全分给(A), 同理,(b[i] > a[i]), 将(b[i])分给(B)
    • 如果(A)(B)最终不相同,那么需要调整使他们相同
    • (A < B),优先使用 (b[i] <= a[i])(b[i] / a[i]) 尽可能大的组
    • (B < A),优先使用 (a[i] < b[i])(a[i] / b[i]) 尽可能大的组
    • 因为要动态的进行操作,所以可以在权值线段树上二分,对两种情况分别建树

    做法2

    • 注意到最优解一定是两个人耗时相等。
    • 设第 i 道题分配比例为 (x_i)
    • (sum_{i=1}^{n} (a_i+b_i)x_i = sum_{i=1}^{n}b_i)(0leq x_ileq 1) 为条件
    • 最小化 (sum_{i=1}^{n}a_ix_i)
    • 这是个线性规划问题,最优解一定可以在可行域的顶点处取得。
    • 因此存在最优解非 0,非 1 的元素,最多只有一个【否则不是顶点】
    • 做变量代换 (x_i'=(a_i+b_i)x_i),约束条件可写成 (sum_{i=1}^{n}x_i' leq C=sum_{i=1}^{n} b_i,其中(0leq x_i'leq a_i+b_i))
    • 目标函数为 (sum_{i=1}^{n}frac{a_i}{a_i+b_i}x_i')
    • (frac{a_i}{a_i+b_i}) 小的 (i) 对应的 (x_i') 极大。
    • (frac{a_i}{b_i}) 的值插入权值线段树,取到 (1)(x_i) 一定是标号最小的若干个 (i),在权值线段树上二分查找即可。

    复盘 比赛时在这题的后期配合太憨憨了。


    H. TDL

    solved by rdc 25min -2

    题意 签到题 2.0

    做法 枚举 (f(n,m)-f(n)) 这个东西很小。

    解体 枚举的元素太多了 TLE 了两发。


    J. Ridiculous Netizens

    upsolved

    题意 给一棵树,点有点权,求乘积小于等于 (m) 连通块的个数。

    做法

    • 考虑包含根节点的连通块个数。
    • 对树做 DFS 序,(dp[i][j]) 表示前 (i) 个点,乘积为 (j) 的连通块方案数。
    • 时间空间复杂度都要解体。完蛋了啊。
    • 数论分块!按 ([frac{m}{x}]) 的值,对 (x) 进行分块。可以证明[1]如果 (x,y) 属于同一块,那么 (cx,cy(cxleq m)) 一定属于同一块。
    • 考虑转移,决策一下是否拿 (i+1) 号点,拿的话,转移到 (i+1),不拿的话,转移到 (R[i+1])((R[i+1]) 表示 (i+1) 的子树中 DFS 序最大的点)。
    • 不包含根呢?重心分解!

    [1] 证明:令 (m=ax+b=ay+d(0leq b,d<a)), ([frac{m}{kx}]=[frac{m}{ky}]=[frac{a}{k}])

    CCPC HangZhou 的一道题
    Bitset 优化一下转移即可。


    K. 11 Dimensions

    solved by rdc 142min -2

    题意 一个十进制数字,有些位置是 ?,输出字典序第 (k) 小,是 (m) 的倍数的数字。

    做法

    • 可能复杂度不太对。
    • 预处理每个后缀,有多少种方案能构造出模 m 等于 a 的方案数,DP 即可。
    • 猜测大部分 ?都是 0. 于是每次二分下一个非 0 的 ?在什么地方。

    L. Stay Real

    solved by rdc 30min

    题意 签到题 1.0,小根堆,两人博弈,轮流摘树叶。

    做法 注意到这个小根堆,下证双方的最优策略都是取最大元素.

    证明(假的)

    • 考虑反证
    • 对于局面 P,先手很任性,偏偏不选最大值,假设这时比选最大值更优。
    • 那后手把最大值吃了。
    • 先手:“我们两个换一下好不好?”
    • 演不下去了,仍然不会证。
  • 相关阅读:
    angular 项目 error TS2451: Cannot redeclare block-scoped variable 'ngDevMode'
    chrome 总崩溃的正确解决方法
    angular 学习日志
    mongodb 3.4 学习 (二)命令
    mongodb 3.4 学习 (一) 安装
    python中文入库
    [转贴] 流量统计脚本
    监控系统开发的一些参考
    nagios centos7 rpm打包
    collectd配置
  • 原文地址:https://www.cnblogs.com/FST-stay-night/p/11317296.html
Copyright © 2011-2022 走看看