• GYM102500 NWERC 2019 VP 记录


    写在前面

    和 @zkdxl 组队 VP 了一场。
    被 @zkdxl 带飞了 ,所有罚时都是我贡献的

    A

    题意:
    有一个游戏,\(n\) 个人,初始分数都是 \(0\)\(w\) 轮,每轮有给定 \(k\) 个人分数 \(+1\)
    求每个人的排名平均值。
    题解:
    考虑我们可以统计以下两种贡献来的出答案。

    1. 其他人分数 \(+1\) 使得他排名增大
    2. 他分数 \(+1\) 使得他排名减小

    同时 1 和 2 的贡献都会延续到最后,所以对和的贡献就是 \((w-i+1)\times v\)

    2 可以直接枚举他分数变化时刻。
    可以维护每时每刻有多少分数为 \(w\) 的人。
    他分数增加了,排名变化量就是当前这个分数还没增加的人数。
    可以直接暴力计算,复杂度 \(O(\sum w)\)

    1 可以对每个人分别计算,考虑他分数变化情况。
    对于他没变化的分数段,只要在这个分数上增加了就能对他有贡献。
    可以用 vector 记录分数为 \(i\) 的时候分别有哪些时刻有增加。
    然后维护以下 \(\sum i\)\(\sum 1\) 就可以求出贡献为 \((w+1)\sum 1-\sum i\)

    代码:
    https://codeforces.com/gym/102500/submission/134162933

    C

    题意:

    题解:
    签到题,但是细节有一点多。
    贪心地在重复地方塞夹子就行了。
    代码:
    https://codeforces.com/gym/102500/submission/134160067

    D(补)

    题意:
    \(n\)\(m\) 边的图,边权为 \(w_i\),你可以钦定 \(v(v>0),c(c\ge 0)\)
    然后把所有边的边权变成 \(\frac{w_i}{v}+c\)
    问无论怎么钦定都不可能在 \(1\)\(n\) 的最短路上的边。
    题解:
    赛时会做了,但是午饭、午睡来不及调了。
    首先设初始 \(1\)\(n\) 的某条路径经过了 \(c_i\) 条边,权为 \(s_i\)
    那对于某个 \((c,v)\),它的答案是 \(\frac{s_i}{v}+cc_i=\frac{1}{v}(s_i+(cv)c_i)\)
    \(cv=k\),则相当于我们可以钦定 \(k(k>0)\),权是 \(s_i+kc_i\)
    然后 \(s_i+kc_i\) 可以当作一条斜率为 \(-k\) 的直线过 \((c_i,s_i)\) 的截距。
    相当于我们只需要求出一个下凸壳,只有在下凸壳上的路径菜才可能在最短路上。
    我们 dp 求出 \(1\)\(n\) 的经过 \(k\) 的最短路权值,复杂度 \(O(nm)\)
    我他妈赛时赛后想用 dijkstra 求这个傻逼东西直接 TLE on test 22
    然后求一遍下凸壳,因为 \(k>0\) 还需要抛掉后半段不降的。
    然后直接记录每个点的前驱,覆盖一下就行了。
    总复杂度 \(O(nm)\) 非常稳。
    代码:
    https://codeforces.com/gym/102500/submission/134180634

    E

    题意:

    题解:

    送分题,但是卡精,过于 ex。
    代码:
    https://codeforces.com/gym/102500/submission/134160344

    H(嘴过,zk 切)

    题意:
    有一条折线,经过 \((i,h_i)\),找到两点 \(A,B\) 在折线上。
    使得 \(k_{AB}\ge p\) 使得 \(|A_x-B_x|\) 最大。
    题解:
    首先让 \(h_i\leftarrow h_i-pi\),这样相当于求一条水平线。
    肯定有一个端点在整点上,证明显然,调整即可。
    然后枚举在哪个端点上,接下来肯定具有单调性。
    然后维护前缀最小值、前缀最大值、后缀最小值、后缀最大值,二分一下就行了。

    J

    题意:
    有一个序列,你可以做两种操作:

    1. 选择集合 \(S\),对里面每个下标,对应的权值 \(+1\)\(-1\),代价为 \(A\)
    2. 删掉一个数,代价为 \(B\)

    让序列变成正负交替,求最小代价。
    题解:
    枚举 1 操作用 \(k\) 次,相当于你可以改变某些数的符号。
    然后操作 1 的贡献是可以通过次数求出的,剩下可以认为操作 1 不需要代价。
    然后设计 dp[i][0/1] 表示到 \(i\) 是负/正的最小代价。
    初始肯定有转移 dp[i][b]+c -> dp[i][b^1],然后每次可能会多出一些转移。
    其实可以分讨,但是懒得想了,就搞了个动态 dp,直接暴力维护就做完了。

  • 相关阅读:
    日志记录的作用和方法 java
    log4j自动加载原理
    java反射中的动态代理机制(有实例)
    万能的ctrl+shift+F(Element 'beans' cannot have character [children], because the type's content type is element-only.错误)
    Spring的@ModelAttribute注解
    Spring MVC 的@RequestParam注解和request.getParameter("XXX")
    SpringMVC 示例实战教程
    ecshop教程:重置后台密码MD5+salt
    github常见操作和常见错误!错误提示:fatal: remote origin already exists.
    ECShop函数列表大全
  • 原文地址:https://www.cnblogs.com/pealfrog/p/15503784.html
Copyright © 2020-2023  润新知