• 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)) .

  • 相关阅读:
    abp记录1
    javascript Date format(js日期格式化) 转载
    css 宽高等比
    MVC 自己创建URL 对象处理路径
    转载 Easyui Tree方法扩展
    Bootstrap 学习笔记1
    动态创建form 完成form 提交
    单例模式
    工厂模式(已体会到此模式的意义)
    设计模式实践
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13766455.html
Copyright © 2020-2023  润新知