CF 495C. Treasure 模拟(括号配对)
来源:互联网 发布:网络最好的诈骗文章 编辑:程序博客网 时间:2024/05/17 01:57
题意:给出字符串s,字符串包含'(',')','#' 先在将'#'替换成1个或者一个以上的右括号.
|s|<=1e5,问是否存在替换方案,使得字符串的括号是合法的,若存在,则输出每个'#'的替换个数,若无解输出-1.
任意前缀i中右括号数量<=左括号,最后的左括号和右括号相等即为合法.
'#'至少为一个右括号 先放用一个右括号来替,核心:然后将已经配对的左右括号删除.若此时前缀多')'则无解.
|s|<=1e5,问是否存在替换方案,使得字符串的括号是合法的,若存在,则输出每个'#'的替换个数,若无解输出-1.
任意前缀i中右括号数量<=左括号,最后的左括号和右括号相等即为合法.
'#'至少为一个右括号 先放用一个右括号来替,核心:然后将已经配对的左右括号删除.若此时前缀多')'则无解.
剩下的只能为:((((## 或者 C#C#CC#. 也就是只要最后一个为'#'即有解
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+20;char s[N];int vis[N],pos[N],id=0,res[N];stack<int> sta;vector<char> a;int main(){scanf("%s",s+1);int n=strlen(s+1);bool flag=true;for(int i=1;i<=n;i++){if(s[i]=='(')sta.push(i);else{if(sta.empty())flag=false;else{int z=sta.top();vis[z]=1,sta.pop();if(s[i]!='#')vis[i]=1;elsepos[i]=++id;}}}int re=sta.size();if(re)for(int i=n;i>=1;i--){if(!vis[i]){if(s[i]=='#')res[pos[i]]=re;elseflag=false;break;}}if(flag==false){puts("-1");return 0;}for(int i=1;i<=id;i++)printf("%d\n",res[i]+1);return 0;}
阅读全文
0 0
- CF 495C. Treasure 模拟(括号配对)
- CF#494C Treasure
- CF 282C Treasure
- 括号配对问题----栈模拟
- 括号配对-c(栈)
- 括号配对问题 (栈模拟 简单题)
- CF#282 Div 2 C Treasure
- 括号配对问题 C语言练习
- C语言 括号 配对 不相交
- 花括号配对问题c语言
- 括号配对
- 括号配对
- 括号配对
- 括号配对
- 括号配对
- 括号配对
- 括号配对
- 括号配对
- qt调试时监视数组变量
- 关于dpkg一些小问题
- Bootstrap 栅格系统 学习总结 Bootstrap框架是如今最流行的前端框架之一,Bootstrap功能强大,简单易学,很符合实际应用场景。 只是Bootstrap的内容较多,新手
- 类关键字以及多态
- SVN服务端在Linux环境下的安装和配置(多仓库)
- CF 495C. Treasure 模拟(括号配对)
- java调整图片透明度
- 欢迎使用CSDN-markdown编辑器
- 【Photoshop】批量修改图片分辨率
- 关于docker
- [Git] Git出现一些错误的解决方法
- 揭秘贩卖QQ号背后的产业链 月入1万
- QT,C++最好的调试工具(抽象定义上的工具)
- log4j