XSY3318
CSA35G
对于一个询问区间的集合SSS,求出每一个数被哪些区间覆盖了,记为SiS_iSi​。
要能保证猜出选中数,当且仅当每个数的SiS_iSi​互不相同。
考虑求出不满足要求的集合SSS的个数。

首先可以观察得到SiS_iSi​的一个性质:若a<b<c<da<b<c<da<b<c<d且Sa=Sc,Sb=SdS_a=S_c,S_b=S_dSa​=Sc​,Sb​=Sd​,则必有Sa=Sb=Sc=SdS_a=S_b=S_c=S_dSa​=Sb​=Sc​=Sd​。

证明:因为Sa=ScS_a=S_cSa​=Sc​,所以如果一个区间覆盖了aaa,一定也覆盖了ccc,那么这个区间一定也覆盖了bbb,又因为Sb=SdS_b=S_dSb​=Sd​,所以该区间一定也覆盖了ddd。同理可证覆盖了bbb或ccc或ddd的区间一定也覆盖了其它三个数。

我们给每个数一个编号aia_iai​,满足当且仅当SiS_iSi​相同的数aia_iai​相同。

由刚才的性质我们知道,不同的aaa值的排布 只可能是以下情况:
–x--xx–xy—y–yy–(x,yx,yx,y出现范围呈并列关系)
–x--y-yy-y-x-xx-----(x,yx,yx,y出现范围呈包含与被包含关系)
不可能是这种情况:
–xx-y-x-x-yyy-------(x,yx,yx,y出现范围呈相交关系)

所以可以把 构造形如 x–xy–yz–z 的序列aaa 分解成 构造形如 x—x 的序列aaa,构造形如 y–y 的序列aaa,构造形如 z–z 的序列aaa 三个子问题。

并且在构造形如 x—x 的序列aaa时, — 不管怎么填,最后得到的方案都一定猜不出选中数。
y–y , z–z 同理。

形式化地,每次把aaa中的第一个数xxx放入bbb的末尾,然后在aaa中删掉最后一个xxx前的所有数(包括最后一个xxx)。
例如a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]
此时b=[1,2,5,10,6,9]b=[1,2,5,10,6,9]b=[1,2,5,10,6,9]
可以发现,只包含被删掉数的区间可有可无,但包含未被删掉数的区间一定要使未被删掉数的aaa值互不相同,即这些包含未被删掉数的区间对应着一个长度为∣b∣|b|∣b∣的序列的答案。
例如序列bbb中一个包含1,2的区间,对应着序列aaa中一个包含1,2,3,2,4,2的区间。

那么就可以DP了:
记fif_ifi​为iii个数的答案,gi,jg_{i,j}gi,j​为iii个数,处理之后之剩jjj个数的答案。则有:

fi=2Ci+12−∑j=1i−1fjgi,jf_i=2^{C_{i+1}^{2}}-\sum_{j=1}^{i-1}f_jg_{i,j}fi​=2Ci+12​−j=1∑i−1​fj​gi,j​

gi,j=gi−1,j−1+∑k=0gi−k−2,j−12Ck+12g_{i,j}=g_{i-1,j-1}+\sum_{k=0}g_{i-k-2,j-1}2^{C_{k+1}^{2}}gi,j​=gi−1,j−1​+k=0∑​gi−k−2,j−1​2Ck+12​

时间复杂度:O(n3)O(n^3)O(n3)或O(n2logn)O(n^2logn)O(n2logn)

还可以用多项式优化,但我不会。

[CSA35G][XSY3318]Counting Quests (DP)相关推荐

  1. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  2. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  3. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  4. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  5. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  6. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  7. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  8. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. cs224n第二讲词向量表示:word2vec
  2. 想写一篇关于.net下COM工作原理的文章
  3. 招聘、招聘,我就这样被算法选中
  4. 降准对房价与股市的影响!
  5. 2020传道(原中国开源圈)开源寄语
  6. Spss乱码问题的解决方法
  7. Linux安装log4cpp
  8. k3金蝶 java版本_金蝶KIS旗舰版和K3wise的不同
  9. python可视化分析网易云音乐评论_网易云音乐评论 可视化分析
  10. C语言—各种数据类型间的混合运算
  11. 爱国者p8880e java_口袋里的电脑 爱国者P8880E MID评测
  12. MATLAB求解3对角系数矩阵方程,实验5.3 用追赶法求解三对角方程组
  13. ckplayer ajax,谁能帮我做一个脚本啊?能让这个网页视频播放可以拉动进度条 可以快进...
  14. 如何用css只做一个div鼠标点击变色
  15. python 爬虫 金山词霸每日一句 优美的文段中英文爬取自编
  16. 解决Carla同步模式下Runtime Error的问题(tick hangs)
  17. 技术分享 | 实战 MySQL 8.0.17 Clone Plugin
  18. 计算机打印机提示无法打印,打印机没有打印设置,教您打印机无法打印怎么解决...
  19. Android桌面小组件---Widget组件开发(什么是Widget)
  20. STK Engine二次开发-WPF方式

热门文章

  1. mysql安装版和解压版哪个好_红米k30pro变焦版和荣耀30pro哪个好-哪个更值得入手...
  2. 算法设计与分析——动态规划——石子合并问题
  3. leetcode——242. 有效的字母异位词
  4. w7下如何安装linux双系统,ubuntu安装教程(下): 教你装win7+Ubuntu双系统
  5. 后端学习 - SpringMVC
  6. 软件构造学习笔记-第六周
  7. fc协议有哪些数据传输服务器,FC协议详解
  8. [蓝桥杯2016初赛]煤球数目-找规律
  9. 计算机蠕虫是一个程序或程序系列,它采取截取口令并试图在系统中,计算机蠕虫病毒是一个程序或程序系列,它采取截取口令并试图在系统中做非法动作的方式直接攻击计算机。...
  10. 线性代数---矩阵的各种问题求解方法