Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维,模拟栈)
2024-10-11 00:38:26
题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法.
题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后一定会有两个括号剩余,并且这两个括号要么是\(((\)要么是\())\),\()(\)是无论如何都不合法的,对于\())\),我们去找它左边的\()\)的个数贡献给答案(因为每次修改可以使[\((++\),\()--\)],所以栈中剩余的\())\)就没有了),对于\(((\)的情况也是一样的,我们只要去找它右边的\((\)就行了.
代码:
int n;
char s[N];
int stk[N];
int cnt; int main() {
//ios::sync_with_stdio(false);cin.tie(0);
scanf("%d",&n);
scanf("%s",s+1);
for(int i=1;i<=n;++i){
if(s[i]==')'){
if(cnt && s[stk[cnt]]=='(') cnt--;
else stk[++cnt]=i;
}
else stk[++cnt]=i;
} if(cnt&1 || cnt>2 || cnt==0){
puts("0");
return 0;
} int top1=stk[cnt];
int top2=stk[cnt-1];
int ans=0;
if(s[top2]==')'){
if(s[top1]==')'){
for(int i=top2;i>=1;--i){
if(s[i]==')') ans++;
}
printf("%d\n",ans);
}
else{
puts("0");
}
}
else{
for(int i=top1;i<=n;++i){
if(s[i]=='(') ans++;
}
printf("%d\n",ans);
} return 0;
}
最新文章
- Spark 入门
- io流(详询请加qq:2085920154)
- codeforces 616E Sum of Remainders (数论,找规律)
- ytu 1304:串的简单处理(水题)
- ASP.NET中读取excel内容并显示
- Iframe的应用以及父窗口和子窗口的相互访问
- 使用DNSAgent拦截特定域名
- 写一个类时什么时候需要重写toString
- css的学习笔记
- Select下拉列表选择自动提交form表单数据
- tomcat部署服务乱码问题
- netstat -s TCP连接失败 相关统计 解释
- 02:MongoDB操作
- kylin3
- SPOJ 694 Distinct Substrings(不相同子串个数)
- 2018.08.20 loj#117. 有源汇有上下界最小流(模板)
- BZOJ4011 HNOI2015落忆枫音(动态规划+拓扑排序)
- PHP 5.3.13 memcache win 64 配置和安装
- pandas数据对齐
- wx.grid
热门文章
- three.js 之cannon.js物理引擎
- 同一个网段内所有服务器virtual_router_id设置相同的后果
- 面试时通过volatile关键字,全面展示线程内存模型的能力
- BAPI_SALESORDER_CREATEFROMDAT2 条件 定价元素
- SEO大杀器rendertron安装
- three.js cannon.js物理引擎地形生成器和使用指针锁定控件
- redis修改requirepass 参数 改密码
- 从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质
- SharePoint Online 站点模板中权限的设置
- RabbitMq消费者在初始配置之后进行数据消费