Codeforces远古场 Longest Regular Bracket Sequence (动态规划)

Longest Regular Bracket Sequence

题面翻译

给出一个括号序列,求出最长合法子串和它的数量。
合法的定义:这个序列中左右括号匹配

题目描述

This is yet another problem dealing with regular bracket sequences.

We should remind you that a bracket sequence is called regular, if by inserting «+» and «1» into it we can get a correct mathematical expression. For example, sequences «(())()», «()» and «(()(()))» are regular, while «)(», «(()» and «(()))(» are not.

You are given a string of «(» and «)» characters. You are to find its longest substring that is a regular bracket sequence. You are to find the number of such substrings as well.

输入格式

The first line of the input file contains a non-empty string, consisting of «(» and «)» characters. Its length does not exceed $ 10^{6} $ .

输出格式

Print the length of the longest substring that is a regular bracket sequence, and the number of such substrings. If there are no such substrings, write the only line containing “0 1”.

样例 #1

样例输入 #1

)((())))(()())

样例输出 #1

6 2

样例 #2

样例输入 #2

))(

样例输出 #2

0 1

考虑这道题的DP方法。
不难想出,要用 f [ i ] f[i] f[i] 来表示前 i i i 段里面最长的合法括号序列,现在来考虑能够怎么DP。

合法的序列可以有以下两种情况:

  • ((())),也就是单个大括号
  • ()()(()),也就是多个括号

那么对于单个大括号当然就很好维护,他的长度就可以算为最右边的右括号的下表减去最左边的左括号的下表加1,在这种情况下不需要状态转移。

对于多个括号的情况,我们要考虑状态转移。
由于我们在维护段落的合理性的时候是通过栈来维护的,我们用以下变量来实现数组模拟栈stk[N]为栈本身 tt为栈顶,在检测到左括号的时候我们会压入他的下标,那么取出的时候一定是最左边的右括号先去对应最右边的左括号,知道堆中元素全部弹出。

那么我们可以每次检查一下f[stk[tt] - 1]是否有元素,如果有的话就说明了当前右括号对应的左括号的左边是有另一组合理括号段的,那么就加上他。
因为题目要求要记录数量,所以我们使用cnt数组进行各个段落的最长合理子段的数量记录。
那么最终的状态转移方程就是:++cnt[f[i] = i - stk[tt] + 1 + f[stk[tt--] - 1]]


CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
#define endl '\n'int stk[N];
int tt = -1;
int f[N];
int cnt[N];int main(){string s;cin >> s;for(int i = 0;i < s.size();i++){if(s[i] == '(')stk[++tt] = i;else if(~tt) ++cnt[f[i] = i - stk[tt] + 1 + f[stk[tt--] - 1]];}cnt[0] = 1;for(int i = s.size();~i;i--){if(cnt[i]){cout << i << " " << cnt[i] << endl;return 0;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据开发面试题【Mysql篇】

181、mysql数据库中的引擎 用于数据存储、处理和保护数据的核心服务&#xff0c;不同的数据库引擎有其各自的特点&#xff0c;常见的引擎&#xff1a;InnoDB&#xff0c;Mylsam、Memory、Mrg_Mylsam、Blackhole innodb&#xff1a;是一个事务性存储引擎&#xff0c;提供了对事…

Docker基础篇之常用命令

文章目录 1. 帮助启动类命令2. 镜像命令3. 容器命令4. 总结 1. 帮助启动类命令 启动docker&#xff1a; systemctl start docker停止docker&#xff1a; systemctl stop docker重启docker&#xff1a; systemctl restart docker查看docker 的运行状态&#xff1a; systemc…

MER 2024 第二届多模态情感识别挑战赛

多模态情感识别是人工智能领域的一个活跃研究课题。它的主要目标是整合多种模态来识别人类的情绪状态。当前的工作通常为基准数据集假设准确的情感标签&#xff0c;并专注于开发更有效的架构。然而&#xff0c;现有技术难以满足实际应用的需求。 清华大学陶建华教授联合中国科学…

Flutter 中的 AspectRatio 小部件:全面指南

Flutter 中的 AspectRatio 小部件&#xff1a;全面指南 Flutter 是一个流行的跨平台 UI 框架&#xff0c;它提供了丰富的小部件来帮助开发者构建高质量的应用程序。在 Flutter 的小部件库中&#xff0c;AspectRatio 是一个非常有用的小部件&#xff0c;它允许开发者以一种简单…

Nodejs配置静态文件路径

使用 Express 中的 express.static 内置中间件函数。 代码如下&#xff1a; const path require("path"); const express require("express"); const app express();app.use(express.static(path.join(__dirname, "public")));app.listen(80…

课时138:变量进阶_变量实践_综合案例

2.1.3 综合案例 学习目标 这一节&#xff0c;我们从 免密认证、脚本实践、小结 三个方面来学习 免密认证 案例需求 A 以主机免密码认证 连接到 远程主机B我们要做主机间免密码认证需要做三个动作1、本机生成密钥对2、对端机器使用公钥文件认证3、验证手工演示 本地主机生成…

预热 618,编程好书推荐——提升你的代码力

文章目录 &#x1f4cb;前言&#x1f3af;编程好书推荐&#x1f4d8; Java领域的经典之作&#x1f40d; Python学习者的宝典&#x1f310; 前端开发者的权威指南&#x1f512; 并发编程的艺术&#x1f916; JVM的深入理解&#x1f3d7; 构建自己的编程语言&#x1f9e0; 编程智…

WJ2EDGKA-5.08-8P功能和参数介绍及PDF资料

WJ2EDGKA-5.08-8P 是一款接线端子&#xff0c;以下是它的主要功能和参数介绍&#xff1a; 间距: 5.08mm&#xff08;0.2英寸&#xff09;&#xff0c;这是指相邻针脚之间的中心距离。 针脚数: 8个针脚&#xff08;1X8Pins&#xff09;&#xff0c;这意味着该端子可以连接8根导线…

01- Redis 中的 String 数据类型和应用场景

1. 介绍 String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value 其实不仅是字符串&#xff0c;也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以容纳的数据长度是 512M。 2. 内部实现 Str…

基于Zynq 7000 SoC的迁移设计

基于Zynq 7000 SoC的迁移设计 Vivado IDE工具使用IP集成器进行嵌入式开发。各种IP Vivado IDE IP目录中提供&#xff0c;以适应复杂的设计。您也可以添加 自定义IP到IP目录。 您可以将基于Zynq 7000平台处理器的设计迁移到Vivado design Suite中 使用以下步骤。 1.生成系统基础…

知攻善防应急响应靶机训练-Web3

前言 本次应急响应靶机采用的是知攻善防实验室的Web-3应急响应靶机 靶机下载地址为&#xff1a; https://pan.quark.cn/s/4b6dffd0c51a 相关账户密码 用户:administrator 密码:xj123456xj123456 解题过程 第一题-攻击者的两个IP地址 直接查看apache的log日志搜索.php 发现…

磁力搜索器

磁力链接是一种特殊的下载链接&#xff0c;磁力链接可以理解为一个文件识别码&#xff0c;而并非具体的资源地址&#xff0c;下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点)&#xff0c;如果找到则可以进行传输下载。一般年代越久远的磁力链接下…

今日总结2024/5/27

今日学习了状态压缩DP,状态压缩DP分为棋盘型(基于连通性)和集合型 Acwing.1064 小国王 在 nn的棋盘上放 k个国王&#xff0c;国王可攻击相邻的 8个格子&#xff0c;求使它们无法互相攻击的方案总数。 输入格式 共一行&#xff0c;包含两个整数 n和 k。 输出格式 共一行&…

图像处理知识积累

冲激响应 冲激响应是系统在单位冲激函数激励下引起的零状态响应&#xff0c;它与系统的传递函数互为傅里叶变换关系。在连续时间系统中&#xff0c;任一个信号可以分解为具有不同时延的冲激信号的叠加&#xff0c;因此冲激响应可以描述系统的基本特性。通过电路分析法求解…

【华为OD机试-C卷D卷-200分】篮球游戏(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 幼儿园里有一个放倒的圆桶,它是一个线性结构,允许在桶的右边将篮球放入,可以在桶的左边和右边将篮球取出。 每个篮球有单独的编号,老师可以连续放入一个或多个…

三维大场景管理-3Dtiles规范

简介 &#xff1a; 这篇文章都是三年前写的了&#xff0c;一直在笔记库存中&#xff0c;今天把他放出来。主要是讲Cesium 的3Dtiles 格式&#xff0c;当然3Dtiles主要是解决场景管理大场景的LOD实现的问题&#xff0c;不管是剔除渲染性能优化之Culling 剔除或者 LOD 、3Dtiles…

【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解

【JAVA】JSONObject.fromObject(message&#xff09;引发的JSONObject 详解 一、JsonObject 简介二、JsonObject 基本操作2.1 、创建 JSONObject2.2、访问和操作 JSONObject2.3 生成 JSON 字符串2.4、示例代码 三、JsonObject 常见库3.1、使用 org.json 库3.2、使用 net.sf.jso…

Java 8的Stream API的使用说明,轻松实现集合的各种转换

Java 8中的Stream API为函数式编程带来了极大的便利&#xff0c;使得处理集合数据变得更加高效和简洁。以下是关于Java 8 Stream API的使用说明&#xff0c;我会尽量按照清晰的结构进行分点表示和归纳&#xff1a; 一、Stream API的基本概念 Stream&#xff1a;Stream是Java 8…

Educational Codeforces Round 158 B. Chip and Ribbon (贪心)

有一条带子&#xff0c;分为 n 个单元格&#xff0c;从左到右编号为 1 至 n 。最初&#xff0c;每个单元格中都写入了一个整数 0 。 单细胞与芯片玩游戏。游戏由几个回合组成。在第一轮中&#xff0c;Monocarp 将芯片放入色带的 1 -st 单元中。除了第一轮之外&#xff0c;在每…

SSM基于微信小程序的校园表白墙的设计与实现-计算机毕业设计源码58219

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园表白墙微信小程序被用户普遍使用&#xff0c;为方便用…