打卡信奥刷题(823)用C++信奥P10472[普及组/提高] 括号画家

P10472 括号画家

题目描述

Candela 是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的 Candela 画了一排括号序列,其中包含小括号 ()、中括号 [] 和大括号 {},总长度为 NNN。这排随意绘制的括号序列显得杂乱无章,于是 Candela 定义了什么样的括号序列是美观的:

  1. 空的括号序列是美观的;
  2. 若括号序列 A 是美观的,则括号序列 (A)[A]{A} 也是美观的;
  3. 若括号序列 A、B 都是美观的,则括号序列 AB 也是美观的;

例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。

现在 Candela 想在她绘制的括号序列中,找出其中连续的一段,满足这段子序列是美观的,并且长度尽量大。你能帮帮她吗?

输入格式

第一行一个长度为 NNN 的括号序列。

输出格式

一个整数,表示最长的美观的连续子序列的长度。

输入输出样例 #1

输入 #1

({({(({()}})}{())})})[){{{([)()((()]]}])[{)]}{[}{)

输出 #1

4

说明/提示

数据保证,各个测试点的 NNN 的大小分别为:5,10,50,100,100,1000,1000,10000,10000,100005,10,50,100,100,1000,1000,10000,10000,100005,10,50,100,100,1000,1000,10000,10000,10000

C++实现

#include<bits/stdc++.h>
#define int long long
using namespace std;
char st[114514];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string a;
int n,maxn=0;
cin>>a;
n=a.size();
for(int i=0;i<n;i++)
{
int now=0,top=0;
for(int j=i;j<n;j++)
{
if(a[j]‘(’||a[j]‘[’||a[j]‘{’)st[++top]=a[j];
if(a[j]
‘)’)if(st[top]‘(’)top–,now++;else break;
if(a[j]
‘]’)if(st[top]‘[’)top–,now++;else break;
if(a[j]
‘}’)if(st[top]‘{’)top–,now++;else break;
if(top
0)maxn=max(maxn,now*2);
}
}
cout<<maxn;
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值