CF1264D1 Beautiful Bracket Sequence (easy version)
考虑在一个确定的括号序列中,我们可以枚举中间位置,按左右最长延伸出去的答案计算。
我们很自然的思考,我们直接维护左右两边,在删除一些字符后能够延伸的最长长度。
我们设\(f_{i,j}\)为\(i\)点合法删除向左延伸的最大长度。
\(
f_{i,j} =
\left\{
\begin{aligned}
&f_{i - 1,j} (a[i] = ')'\ )\\
&f_{i - 1,j - 1}(a[i] = ')'\ )\\
&f_{i - 1,j} + f_{i - 1 ,j - 1} (a[i] = '?'\ )\\
\end{aligned}
\right.
\)
设\(g_{i,j}\)为向右延伸,则有同样的转移。
\(ans = \sum_{i = 1}^n\sum_{j = 1}^j f_{i,j} * g_{i + 1,j} * j\)
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define N 2005
#define mod 998244353
char a[N];
ll n;
ll f[N][N],g[N][N];
int main(){
scanf("%s",a + 1);
n = strlen(a + 1);
f[0][0] = 1;
for(int i = 1;i <= n;++i){
if(a[i] == '(' || a[i] == '?')
for(int j = 1;j <= n;++j)
f[i][j] = (f[i][j] + f[i - 1][j - 1]) % mod;
if(a[i] == ')' || a[i] == '?')
for(int j = 0;j <= n;++j)
f[i][j] = (f[i][j] + f[i - 1][j]) % mod;
}
g[n + 1][0] = 1;
for(int i = n;i >= 1;--i){
if(a[i] == ')' || a[i] == '?')
for(int j = 1;j <= n;++j)
g[i][j] = (g[i][j] + g[i + 1][j - 1]) % mod;
if(a[i] == '(' || a[i] == '?')
for(int j = 0;j <= n;++j)
g[i][j] = (g[i][j] + g[i + 1][j]) % mod;
}
ll ans = 0;
for(int i = 1;i <= n - 1;++i)
for(int j = 1;j <= n;++j)
ans = (ans + f[i][j] * g[i + 1][j] % mod * j % mod) % mod;
std::cout<<ans<<std::endl;
}
CF1264D1 Beautiful Bracket Sequence (easy version)的更多相关文章
- CF1264D2 Beautiful Bracket Sequence (hard version)
考虑\(D1\)的\(O(n^2)\),我们直接进行组合处理. 考虑在\(p\)这个位置,左边有\(l\)个(,右边有\(r\)个),左边有\(l\)个问号,右边有\(r\)个问号. 这个位置的贡献为 ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
- CF1264D2 Beautiful Bracket Sequence
我们枚举每两个字符的空档,统计一个空档左边有 \(l\) 个左括号, 右边有 \(r\) 个右括号,左边有 \(u\) 个问号,右边有 \(v\) 个问号. 则对于 \(p\) 的答案 \(ans_p ...
- Codeforces 1264D - Beautiful Bracket Sequence(组合数学)
Codeforces 题面传送门 & 洛谷题面传送门 首先对于这样的题目,我们应先考虑如何计算一个括号序列 \(s\) 的权值.一件非常显然的事情是,在深度最深的.是原括号序列的子序列的括号序 ...
- Ping-Pong (Easy Version)(DFS)
B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...
- CF1225B1 TV Subscriptions (Easy Version)
CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- UESTC 1546 Bracket Sequence
Bracket Sequence Time Limit: 3000MS Memory Limit: 65536KB 64 ...
- CF#138 div 1 A. Bracket Sequence
[#138 div 1 A. Bracket Sequence] [原题] A. Bracket Sequence time limit per test 2 seconds memory limit ...
- CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)
E. Correct Bracket Sequence Editor time limit per test 2 seconds memory limit per test 256 megabytes ...
随机推荐
- Java(24)常用API三
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228417.html 博客主页:https://www.cnblogs.com/testero ...
- XiaoXin 13Pro-Hackintosh 小新13pro崇尚极简的黑苹果双系统
Lenovo XiaoXin-13-Pro-Hackintosh 关键词:Hackintosh XiaoXin EFI Tutorial Lenovo 以下提及的EFI及其他部分文件见github仓库 ...
- [no code][scrum meeting] Alpha 12
项目 内容 会议时间 2020-04-19 会议主题 周总结会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalog() ...
- BUAA-软件工程第一次作业
软件工程第一次作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标 团队完成好的软件,并对自己作出规划 这个作 ...
- hystrix的dashboard和turbine监控
当我们的应用程序使用了hystrix后,每个具体的hystrixCommand命令执行后都会产生一堆的监控数据,比如:成功数,失败数,超时数以及与之关联的线程池信息等.既然有了这些监控数据数据,那么我 ...
- [火星补锅] 非确定性有穷状态决策自动机练习题Vol.1 T3 第K大区间 题解
前言: 老火星人了 解析: 很妙的二分题.如果没想到二分答案.. 很容易想到尝试用双指针扫一下,看看能不能统计答案. 首先,tail指针右移时很好处理,因为tail指针右移对区间最大值的影响之可能作用 ...
- 主集天线和分集天线——4G天线技术
主集天线和分集天线 分集接收技术是一项主要的抗衰落技术,可以大大提高多径衰落信道传输下的可靠性,在实际的移动通信系统中,移动台常常工作在城市建筑群或其他复杂的地理环境中,而且移动的速度和方向是任意的. ...
- 攻防世界 杂项14.Erik-Baleog-and-Olaf
下载解压后用notepad++打开 发现是一个PNG的图片文件,该后缀,再用Stegsolve打开看一下, 发现一个残缺二维码,果断在线PS补全 扫码得到flag flag{#justdiffit}
- [CSP-S2021] 廊桥分配
链接: P7913 题意: 有 \(m_1\) 架飞机和 \(m_2\) 架飞机停在两个机场,每架飞机有到达和离开的时间,要将 \(n\) 个廊桥分给两个机场,每个廊桥同一时刻只能停一架飞机,需要最大 ...
- 在c中使用正则表达式
今天学习编译原理的时候,用c写一个简易的文法识别器实验遇到了一个问题:要用正则表达式去识别正则文法里面的A->ω,A->Bω, 其中ω属于T的正闭包,也就是说我们对正则文法的产生式进行抽象 ...