1.12 CW 模拟赛 T1. 括号序列

news/2025/1/12 16:25:04/文章来源:https://www.cnblogs.com/YzaCsp/p/18667026

思路

根据赛时的检验,
典型的动点问题的 \(\rm{trick}\) 并不能在这里使用, 也就是说, 分类讨论

  • 前缀 + \(i\) + 后缀
  • 前缀 + \(i\)
  • 后缀 + \(i\)

是不可行的

考虑括号串问题的常见做法, 先将其赋值成 \(1, -1\) 之后进行处理
你发现这种做法有枚举字段和的瓶颈, 所以也不可行
当然你可以进行转化之后利用这种做法

用栈来处理更是天方夜谭

考虑转到图上去处理, 容易的, 你可以将一个合法括号串表示成这样
pEPdtzQ.png

你发现令 \(f_i\) 表示 \(i\) 节点的答案, 容易有

\[f_i = f_{\textrm{fa}_ \textrm{i}} + (lb_i + 1) \times (rb_i + 1) \]

其中 \(lb, rb\) 表示左右兄弟的个数

容易转移

考虑建树怎么建
你发现不用真的建树, 你只需要把 \(lb, rb\) 求出来即可, 而这个你只需要在原串上直接做即可

实现

框架

如上维护

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;const int MAXN = 10000010, mod = 1e9 + 7;
int n, to[MAXN], stk[MAXN], tp, ans[MAXN], rans[MAXN]; ll res;
char s[MAXN];
int pre[MAXN];signed main () {scanf("%s", s + 1), n = strlen (s + 1);for (int i = 1; i <= n; i++) {if (s[i] == '(') stk[++tp] = i;else if (tp) {to[stk[tp]] = i, to[i] = stk[tp], tp--;if (tp) pre[to[i]] = stk[tp];}}for (int i = n; i >= 1; i--) if (to[i]) {if (s[i] == '(') ans[i] = ans[to[i] + 1] + 1;}for (int i = 1; i <= n; i++) if (to[i]) {if (s[i] == ')') rans[i] = rans[to[i] - 1] + 1;}for (int i = 1; i <= n; i++) if (to[i]) {if (s[i] == '(') { ans[i] = ans[to[i]] = ans[pre[i]] + 1ll * ans[i] * rans[to[i]] % mod; }res += (1ll * i * ans[i]) % mod;}printf("%lld", res);return 0;
}

总结

想的其实挺有逻辑的, 但是确实不会这种情况下的问题

常用的方法, 把匹配类问题丢到图 / 树上去做
本质上其实是因为这个题中, 包含关系的括号串对答案是有继承关系的, 这种继承关系可以建成树来处理

不好建树考虑只利用思想, 简化计算

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

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

相关文章

【Docker】Docker搭建一款开源的RAG聊天应用

项目介绍 Kotaemon是一个由Cinnamon开发的开源项目,旨在提供一个基于检索增强生成(RAG)技术的用户界面,使用户能够与自己的文档进行交互问答。 功能特点 文档问答:Kotaemon允许用户通过自然语言查询与文档进行交互,快速获取所需信息。这一功能在学术研究、企业文档管理等…

客梯自动监测识别摄像机

客梯自动监测识别摄像机通过技术创新和智能化应用,为现代城市客梯的安全管理提供了全新的解决方案。随着技术的不断进步和应用场景的扩展,相信这类系统将在全球范围内得到广泛应用,为乘客的安全出行和客梯运行的高效管理提供更加可靠的保障和支持。当今社会,随着城市建设的…

【Docker】Docker搭建一款开源的加密货币量化交易平台

项目介绍 Freqtrade是一个开源的加密货币量化交易平台,它允许用户通过编写和配置交易策略来自动化交易过程。 功能特点 开源性:Freqtrade的代码是开源的,这意味着用户可以查看、修改和扩展平台的功能。 自动化交易:通过配置交易策略,Freqtrade可以自动执行买卖操作,无需人…

高级数据结构与算法---莫队

这篇文章主要是用来复习的,最近学了一些新的东西,多少要记录一下,不然以后忘了,不过似乎树状数组和ST表还没有补完,等后面有时间(不能拖拉)再去将他们给写完,然后就开始去学习一下计算几何,树形DP以及图论,啊啊啊啊啊啊,还要准备数学建模,哎,为什么明明都放假了,…

AT_abc388_f Dangerous Sugoroku 题解

太幽默了。 显然可以用矩阵快速幂解决,矩阵里维护距离当前点 \(B\) 以内的所有点可不可达,转移只需分段,在区间内和不在区间内用不同的转移矩阵即可。复杂度 \(O(B^3m\log n)\)。 然后你就 T 了。 此时你很急,你现在应该快点卡常来 AK 这场比赛而不是研究其他的做法,于是我…

多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…

计算机网络-多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…

.NET 中管理 Web API 文档的两种方式

前言 在 .NET 开发中管理 Web API 文档是确保 API 易用性、可维护性和一致性的关键。今天大姚给大家分享两种在 .NET 中管理 Web API 文档的方式,希望可以帮助到有需要的同学。 Swashbuckle Swashbuckle.AspNetCore 是一个流行的 .NET 库,它使得在 ASP.NET Core 项目中自动生…

idea设置快捷键

idea设置快捷键 下载安装idea 参考:pyhton、miniConda、pycharm下载安装配置中的pycharm下载安装配置即可,jetbrains系列软件都可如此操作。 查询快捷键 打开安装好的idea, ctrl+alt+s或手动打开Settings/设置, 点击左侧Keymap/按键映射页签, 点击右侧搜索框右侧的放大镜,…

抖音评论生成器在线工具,好评生成器软件,用js+html即可实现

开发技术HTML:用于搭建页面结构。 CSS:用于美化页面样式。 JavaScript:实现核心逻辑,包括文案生成、随机选择、复制功能等。 部分框架代码:<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name=…

Odoo18.0附件分享管理

需求背景 虽然odoo官方提供了文档的门户访问功能,外部用户可以在门户查看共享的文档和相关的附件。但是某些情况下,我们希望外部用户只能有限地能访问我们指定的附件,而不是能够访问整个文档和全部附件。 本文即是介绍为了解决此问题而开发的功能。 功能介绍 这里我们以销售…

git worktree同一个仓库多个分支并行开发和管理

Git Worktree 是 Git 提供的一个功能,允许你在同一个仓库中同时工作在多个工作目录中,每个目录都有自己的工作树和索引。这对于同时处理多个分支或版本非常有用。介绍 Git Worktree 是 Git 提供的一个功能,允许你在同一个仓库中同时工作在多个工作目录中,每个目录都有自己的…