zoukankan      html  css  js  c++  java
  • ARC 103

    (很早做过题不知道为什么现在才写

    题目链接

    C

    没什么好说的 QAQ

    Code

    D

    Description

    给出 (n) 个点,要求构造一个序列,使得对于每个点,可以给序列中的每个数指定一个方向(上/下/左/右),使得可以从原点到达这个点。

    Solution

    不是很会,三进制拆分好像可做但是不想写,莽了个倍增上去结果过了?

    关于正确性,考虑归纳,每次走相当于变成了一个子问题。

    Code

    E

    Description

    给出长度为 (n)(01)(S),构造一棵树。(S_i)(1) 表示存在一条边,使得割掉这条边后剩下两棵树中有一棵大小为 (i);第 (i) 位为 (0) 则表示不存在。

    Solution

    首先,容易发现若 (S_1 = exttt{0})(S_n = exttt{1})(S_i eq S_{n - i},i in [1, n)) 显然无解,下面说明其余情况都是有解的。

    考虑构造一串菊花。具体地,若当前 (1) 的位置为 (i),下一个 (1) 的位置为 (j),则向后连一朵大小为 (j - i) 的菊花。容易发现这样构造符合条件。

    Code

    F

    Description

    给出每个点到其余所有点到距离和 (d_i)(两两不同),构造一棵符合条件的树,或判断无解。

    Solution

    以重心为根。则当前 (d_i) 最大的点一定是叶子,考虑向上走一步的贡献,则它的父亲 (fa) 一定满足 (d_{fa} = d_i + 2 imes sz_i - n),然后把这个孩子的大小并到父亲上就可以了 QAQ。

    重复上述步骤 (n - 1) 次,就构造出了这棵树。特殊地,最后检查一下根到各点的距离和是否正确。

    注意构造过程,容易发现无解当且仅当存在一个点找不到他的父亲(或者找到了它自己)。

    Code

  • 相关阅读:
    求Computational problems associated with Racah algebra
    病理情形
    扫描算法求最大子序列的一次简单非严格证明
    分治法求最大子序列,关于复杂度的一次弱推导
    VFP_等待 rar 命令结束
    Windows_解决win7开机画面变成vista画面的方法
    C#_WinForm的等待窗口
    C#_控件的缩写大全
    SQL Server 2008_基本安装说明
    C#_获取 SQL服务器列表
  • 原文地址:https://www.cnblogs.com/realSpongeBob/p/ARC103.html
Copyright © 2011-2022 走看看