zoukankan      html  css  js  c++  java
  • AtCoder Regular Contest 104 题解

    A

    由二元一次方程组的知识可知 (X = frac{A+B}{2}) (Y = frac{A-B}{2}) , 直接输出即可.

    (Theta(1))

    B

    (A,T) 做一个前缀和 (cnt1[i]) 表示前 (i) 个数当中 (A) 的个数减去 (T) 的个数

    (C,G) 做一个前缀和 (cnt2[i]) 表示前 (i) 个数当中 (C) 的个数减去 (G) 的个数

    枚举区间,可以 (Theta(1)) 判断区间内 (A) 的个数减去 (T) 的个数 以及 (C) 的个数减去 (G) 的个数 是否等于 (0) .

    实际上这个题可以用 (map) 做到 (Theta(nlog n)) .

    C

    首先判掉读入的数里面就有相等的非 -1 的数的情况。

    考虑一个区间是否合法,即区间 ([L,R]) 内部是否能成为一段相交的合法解。

    首先必然有 ((R-L+1)) 是偶数,否则不合法

    (t = frac{R-L+1}{2}) , 有 (t) 个 pair 并且它们互相相交,不难发现这 (t) 个 pair 必然是长度为 (t+1) 的,形如 ([L,L+t]) , ([L+1,L+1+t]) (cdots) ([R-t,R]) 的。

    然后判断是否可能存在这 (t) 个 pair 即可。

    判断好之后考虑记 (dp_i) 表示区间 ([1...i]) 能否形成一组合法解即可,不需要记录使用的 -1 -1 的次数,因为我们在 check 的过程中保证了端点互不相等。

    判断区间合法的复杂度为 (Theta(n)) , 最多需要判断 (Theta(n^2)) 次,所以复杂度为 (Theta(n^3)) .

    D

    对于每个询问的 (x) , 我们相当于是 (x) 可以看成 (0) ,

    (x-1,x-2 cdots 1) 看成 (-1,-2 cdots -(x-1))

    (x+1,x+2 cdots n) 看成 (1,2 cdots (n-x)) , 然后保证选取出来的数和为 (0) 即可。

    (f_{i,j}) 为值域为 ([1,i]) 的可重集(每个数字出现次数不超过 (K) 次) , 总和为 j 的方案数。

    由于 (j) 的范围是 (Theta(KN^2)) , 所以状态总数是 (Theta(KN^3)) , 可以每次转移的时候通过前缀和实现 (Theta(1)) 转移,就可以在 (Theta(KN^3)) 的时间内求出所有的 (f_{i,j}) .

    最后对于每个询问的(x) 答案为 (((K+1)sumlimits_{i=0}^{infty} f_{x-1,i} f_{n-x-1,i}) - 1)

    E

    枚举大小顺序之后直接按照值域 DP 即可。

    (Theta(N^3 N!))

    F

    (f_{v,l,r}) 表示区间 ([l,r]) 左边有一个比区间 ([l,r]) 都大的数 , 区间内所有数都小于等于 (v) 的方案数。

    转移的时候直接枚举区间最大值的位置即可。

    由于 (X_i) 可以对 (n)(min) , 所以复杂度为 (Theta(N^4)) .

  • 相关阅读:
    PHP开发中bcscale timezone charset的设定
    [转]git图解(3):分支操作
    [转]Docker(三):Dockerfile 命令详解
    [转]php中 curl模拟post发送json并接收json
    [转]【docker】CMD ENTRYPOINT 区别
    [转]php模拟post提交请求,调用接口
    [转]【比特币钱包开发 五】新建钱包:生成子账号地址与路径
    [转]bitcoin API reference (JSON-RPC)
    flume原理
    Hive格式各种格式下不同压缩算法的比较
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13766455.html
Copyright © 2011-2022 走看看