zoukankan      html  css  js  c++  java
  • AtCoder agc023_f

    洛谷题目页面传送门 & AtC 题目页面传送门

    题意见洛谷里的翻译,节点 (i) 权值为 (a_i)

    这是个 AGC 的 F,挺吓人的。但是仔细看发现跟 P4437 差不多的,所以这是一个 AGC F 中的水题。(本来是不值得我发题解的,但是由于是 AGC 的 F 就随便写写吧……)

    假设有 (m)(1),这个 (m) 显然是固定的。然后我们设 (m)(1) 的位置为 (p_{1sim m}),这个 (p) 定下来整个序列显然也定下来了。对于 (p) 的一个取值,答案显然为 (sumlimits_{i=1}^m(n-p_i-(m-i)))。随便推一下发现等于 (m(n-m)+dfrac{m(m+1)}2-sumlimits_{i=1}^mp_i)。于是题目转化为最大化 (ans=sumlimits_{i=1}^mp_i)

    仿照 P4437 的推(什么是套路?),我们考虑当前能选的节点集合中的任意两个点 (x,y),若 (x) 放最前面,尝试将 (y) 换到最前面来变得更优。我们统一使用「将 (y) 放到最前面,将 (y) 前面依赖于或等于 (x) 的全部顺移一位」这种方法来移动。

    1. (a_x=a_y=0):显然所有 (1) 都往后移了,(ans) 肯定增大,sqrt{};
    2. (a_x=a_y=1):稍有一丝复杂,注意到所有人移动距离之和等于 (0)(y) 的移动占据了所有负贡献,而其他的又不全是 (1),所以最终对 (ans) 变化量的总贡献是负的, imes;
    3. (a_x=0,a_y=1):跟 (2) 类似, imes;
    4. (a_x=1,a_y=0):跟 (1) 类似,sqrt{};

    综合一下就是 sqrt{} 当且仅当 (a_y=0)。合理性也挺好理解的,就跟 P4437 差不多嘛。然后如果没有 (0) 的话,那显然就随便选了……于是与爸爸合并。然后考虑合并以后该如何比较。不难发现 (sz_id_i) 守恒,然后 (ans) 的贡献总值是 (sumlimits_i cnt_id_i)(cnt_id_i=dfrac{cnt_i}{sz_i}sz_id_i),于是找 (dfrac{cnt_i}{sz_i}) 当作最小的放在 (y) 处与唯一的负距离贡献相乘即可。

    UPD:然后发现,(sumlimits_{i=1}^mp_i=sumlimits_{i=1}^nia'_i),那不就严格弱于 P4437 了吗?那我前面分析了那么多分析了个寂寞啊?

    把 P4437 代码改几个字交上去就 A 了。

  • 相关阅读:
    SOJ 2785_Binary Partitions
    Codeforces Round #328 (Div. 2)
    C++ fill 和memset
    SOJ 2749_The Fewest Coins
    Codeforces Round #327 (Div. 2)
    TYVJ P1013 找啊找啊找GF Label:动态规划
    TYVJ 1014 乘法游戏
    TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp
    错误集合
    TYVJ P1038/P1039 忠诚 标签:线段树
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/AtCoder-agc023-f.html
Copyright © 2011-2022 走看看