首页 > 其他分享 >CF1264D1 题解

CF1264D1 题解

时间:2024-08-21 16:05:35浏览次数:11  
标签:后缀 题解 texttt CF1264D1 序列 text 数量 check

blog。写一个题解区没有的蠢做法,不依赖 dp 但是很难转到 Hard Version(


对于已经确定的序列,深度有单调性。就是如果答案为 \(x\),那么肯定能选出深度为 \(1\sim x\) 的子序列。

记 \(\operatorname{check}_s(x)\) 表示 check 序列 \(s\) 能否选出深度为 \(x\) 的子序列。考虑如何 check:

  • 发现形如 \(\texttt{((}\cdots\texttt{(())}\cdots\texttt{))}\) 的结构最优。
  • 记 \(pre_i\) 表示 \([1,i]\) 中 ( 的数量,\(suf_i\) 表示 \([i,n]\) 中 ) 的数量,只需满足:\(\exists\min(pre_i,suf_{i+1})\ge x\)。
  • 找到序列第一个 \(pre_i=x\) 的位置,检验是否有 \(suf_{i+1}\ge x\) 即可。

显然,对于确定序列有 \(\text{ans}_s=\sum\limits_{x=1}^n \operatorname{check}_s(x)\)。

回到原问题,枚举 \(x=1\sim n\),权值和转为了计数:只需计数 \(\operatorname{check}_s(x)=1\) 的 \(s\) 数量,所有 \(x\) 的方案数加起来就行!

最后将上述 \(\operatorname{check}_s(x)\) 的过程放到计数上就行:

  • 枚举 \(i\),这个 \(i\) 需要满足:是序列第一个 \(pre_i=x\) 的位置,且有 \(suf_{i+1}\ge x\)。
  • 若 \(s_i=\texttt{(}\),前半段在 \(\texttt{?}\) 中凑够左括号数就行,后半段在 \(\texttt{?}\) 中凑到 \(\ge x\) 就行。有贡献:

\[\binom{\text{前缀 }\texttt{?}\text{ 的数量}}{x-\text{前缀 }\texttt{(}\text{ 的数量}}\times\sum\limits_{x-\text{后缀 }\texttt{)}\text{ 的数量}}^{\text{后缀 }\texttt{?}\text{ 的数量}}\binom{\text{后缀 }\texttt{?}\text{ 的数量}}{i} \]

  • 若 \(s_i=\texttt{(}\),前半段稍微改改就行,有贡献

\[\binom{\text{前缀 }\texttt{?}\text{ 的数量}-1}{x-\text{前缀 }\texttt{(}\text{ 的数量}-1}\times\sum\limits_{x-\text{后缀 }\texttt{)}\text{ 的数量}}^{\text{后缀 }\texttt{?}\text{ 的数量}}\binom{\text{后缀 }\texttt{?}\text{ 的数量}}{i} \]

后面 Sigma 的部分可以预处理,然后枚举 \(x,i\) 后就能 \(O(1)\) 计算。

code,时间复杂度 \(O(n^2)\)。

标签:后缀,题解,texttt,CF1264D1,序列,text,数量,check
From: https://www.cnblogs.com/liangbowen/p/18371843

相关文章

  • 题解:AT_abc140_e [ABC140E] Second Sum
    思路:双向链表+组合数学(不过你要用单调栈也没人拦着你)我们现在先抛开题面,先换个思路。我们现在求:这个数能做多少个区间的次大值。我们现在设\(l1,l2,r1,r2\)分别为左边第一个比这个数大的id,第二个比这个数大的id,右边第一个比这个数大的id,第二个比这个数大的id。竟然是......
  • 题解:Codeforces Round 967 (Div. 2) [暴力/贪心]
    A.MakeAllEqualtimelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputYouaregivenacyclicarray\(a_1,a_2,\ldots,a_n\).Youcanperformthefollowingoperationon\(a\)atmost\(n-......
  • 题解 |栈| #中缀表达式求值!!!!#
    描述请写一个整数计算器,支持加减乘三种运算和括号。数据范围:0≤∣s∣≤1000≤∣s∣≤100,保证计算结果始终在整型范围内要求:空间复杂度: O(n)O(n),时间复杂度 O(n)O(n)示例1输入:"1+2"返回值:3示例2输入:"(2*(3-4))*5"返回值:-10示例3输入:"3+2*3*4-1"返回值:26一、使......
  • [ABC132F] Small Products 题解
    题意一句话题意不用再翻译了吧。思路先考虑朴素的dp,设\(dp_{i,j}\)表示长度为\(i\)结尾数字为\(j\)的序列的方案数,状态很好转移:\[dp_{i,j}=\sum_{a=1}^{\lfloor\frac{N}{j}\rfloor}dp_{i-1,a}\]这样时间复杂度是\(\Theta(nk)\)的,显然过不了。考虑优化这个dp。......
  • [ABC156E] Roaming 题解
    前言这哪有蓝,评分似乎有点过了。思路既然是要统计每个房间人数的排列,那我们就枚举把所有人都放到\(i\)个房间里的方案数,这个用插板法解决,把所有人都放到\(i\)个房间里也就是把他们分成\(i\)份,这一部分的答案就是在\(n\)个人的\(n-1\)个空中插入\(i-1\)块隔板的方案......
  • 题解:P10724 [GESP202406 七级] 区间乘积
    思路当一个数是完全平方数的时候,它的所有质因子的次数都是偶数。记\(x\)的质因子为\(p_1^{q1}\timesp_2^{q2}\timesp_3^{q3}...\timesp_v^{qv}\)。这些数可以通过次数的奇偶性用一个\(v\)位的二进制串\(B\)表示,\(B_i\)为\(0\)说明\(q_i\)为偶数,\(B_i\)为\(......
  • [题解]P3311 [SDOI2014] 数数
    P3311[SDOI2014]数数看到多模式匹配,我们考虑先对所有模式串建立AC自动机。然后发现这道题和P4052文本生成器(题解)挺像的,后者让求包含至少一个模式串的个数,这道题让求一个也不包含的个数,这个就是一个用不用\(26^m\)去减的问题,很好处理。但这道题还多了一个条件,“幸运数”必须\(......
  • Prometheus部署以及问题解决
    Prometheus作用:Prometheus监控(PrometheusMonitoring)是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布,并在2016年加入了云原生计算基金会(CNCF)。Prometheus监控旨在收集、存储和查询各种指标数据,以帮助用户监视其应用程序和系统的性能和运行状态。部署流......
  • 题解:CF454B Little Pony and Sort by Shift
    题目描述题目传送门给定一个长度为$n$的数组$a$,每次可以将最后一个元素移动到第一个,问:至少需要几次操作,让序列从小到大排好序,若无解输出$-1$。算法1(暴力枚举)不难想到,将最后一个元素拼接在第一个元素之前,就可以实现将链转换成环,再依次遍历在数组$a_i$中长度为$n$的......
  • Postman中Body添加注释后请求报错问题解决【保姆级教程!!!】
    本文介绍关于Postman中Body添加注释后请求报错问题解决方法如:请求返回下述报错操作失败!系统异常,JsonParseException:Unexpectedcharacter(‘/’(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature‘ALLOW_COMMENTS’notenabled......