zoukankan      html  css  js  c++  java
  • Day1

    D1.T1 AtCoder - agc018_d

    题意:

    (N) 个点的树,第 (i) 条边连接 (A_i)(B_i),边权为 (C_i)。由这棵树建一张图 (G),图 (G) 中任意两个点都有边相连,且边权为树上这两点间简单路径长度。求图 (G) 的最长哈密尔顿路径。

    题解:

    事实上这类的树的问题,通常可以往树的直径 / 重心的角度去考虑。

    当我们要求的是哈密顿回路的时候,我们可以从重心出发,在两颗子树中横跳,使得每条边的经过次数达到上限 (sze_xcdot(n-sze_x))。但是这回我们要求的是哈密顿路径,那么从重心相连的一条边中最短的删掉;如果有两个重心,那么一定要删掉它们之间的那条边。

    有一个改版:如果是最短路径,那么就是 (2 imessum C_i - l)(l) 是直径长度。

    时空:(O(n))。评测记录:AC Submission

    D1.T2 AtCoder - agc041_d

    题意:

    构造一个值域为 ([1,N]),长度为 (N) 的单调不降序列 (A)。并且使得 (forall 1leq kleq N-1),都有任意 (k) 个数之和小于任意 (k+1) 个数之和。求构造方案数,对 (M) 取模。

    题解:

    上面这个条件等价于前一半的数小于等于后一半的数,因为 (k>frac{n}{2}) 时可以消掉一些,成为 (k<frac{n}{2}) 的情况;对于 (k<frac{n}{2}) 的时候,显然只要最大的那一组成立,根据单调性,其他的也都成立了。

    对于单调的数列,我们考虑差分。设 (d)(A) 的差分数组,于是有 (sumlimits_{i=1}^nd_ile n);还有的限制——不妨设 (n=5),那么得:

    [d_1 imes 3 + d_2 imes 2 + d_3 > d_1 imes 2+d_2 imes 2 + d_3 imes 2 + d_4 imes 2 + d_5 ]

    移项:

    [n-d_2-d_3-d_4-d_5 le d_1 + 1 le d_3+2cdot d_4+d_5 ]

    所以对于 fixed (d)(d_1) 有右减左种取值,这个就可以 背包 统计了。复杂度:(O(n^2))

    D1.T3 AtCoder - agc024_f

    题意:

    给定一堆 ( (le 1e6))长度小于等于 (20)01数组,再询问一堆 ( (le 1e6))长度小于等于 (20)01数组 在模式串中是多少个串的子序列(不需要连续)。

    题解:

    假设只有一个模式串和一个询问,那么我们可以结合子序列自动机设一个傻傻的 DP:设 (f_{i,j}=1) 表示前 (i) 能匹配到第 (j) 位......

    假设只有一个询问,但是有多个模式串,那么我们考虑把 DP 中的 (j) 改成一个状压 (S) 的位表示模式串还剩下什么,就能一起转移了——转移中要使用子序列自动机,这要能保证唯一和最优。

    假设有多个询问和多个模式,也就是原题:那么我们把 (i)(j) 都改成状压就行了。

    复杂度:(O(ncdot 2^n)),评测链接:TLE Submission (被卡常)。

    as 0.4123
  • 相关阅读:
    给你的博客园加个面板娘!
    idea实现简单热部署
    idea 上传svn忽略文件
    谈一谈AOP面向切面编程
    做一个自定义注解
    使用aop切面编写日志模块
    数据结构之链表
    数据结构之队列
    数据结构之栈
    数据结构之线性表
  • 原文地址:https://www.cnblogs.com/Linshey/p/14473419.html
Copyright © 2011-2022 走看看