• H - Streets of Working Lanterns

  • Gym - 101149H
  • 题意:括号匹配,有很多"?",这些"?"可以凑成任意一种,判断最后能否恢复成匹配模式的括号
  • 思路:更改"?".肯定与位置有关所以需要存储,入栈同时要保留位置,然后先进行原来的括号匹配 。
  • 匹配完之后进行“?”凑数,一定要注意位置关系,此时栈内如果还有没匹配的括号,那应该先把它们的
  • 顺序反转一下,这样便于接下来尽可能地让前面的“?”去跟“)”匹配,后面的“?”与“(”去匹配。
  • 如果整个过程都能顺利进行的话,最后检验一下剩下的"?"数目是否是偶数即可。
  • #include<bits/stdc++.h>
    using namespace std;
    string str;
    int sum,len,s1,s2,s3,s4,s,ord,cnt,R,L;
    vector<int>q;
    vector<int>pp;
    int main()
    {ios::sync_with_stdio(false);cin>>str;stack<pair<char,int> >stk,st;len=str.size();for(int i=0; i<len; i++){if(str[i]=='?'){q.push_back(i);sum++;continue;}if(st.empty())st.push(make_pair(str[i],i));else{if(st.top().first=='('&&str[i]==')')st.pop();elsest.push(make_pair(str[i],i));}}while(!st.empty()){stk.push(st.top());st.pop();}s=stk.size();if(sum<s)cout<<"Impossible"<<endl;else{bool flag=0;sort(q.begin(),q.end());while(!stk.empty()){if(L==sum){flag=1;break;}ord=stk.top().second;if(stk.top().first==')'&&L<sum){if(ord>q[L]){str[q[L]]='(';L++;stk.pop();}else{flag=1;break;}}else if(stk.top().first=='('&&L<sum){if(ord<q[L]){str[q[L]]=')';L++;stk.pop();}elsepp.push_back(q[L++]);}}if(flag)cout<<"Impossible"<<endl;else{if(s!=0)for(int i=L; i<sum; i++)pp.push_back(q[i]);R=pp.size();if(R==0){if(L==sum)cout<<str<<endl;else{if(sum%2==1)cout<<"Impossible"<<endl;else{for(int i=0; i<sum/2; i++)str[q[i]]='(';for(int i=sum/2; i<sum; i++)str[q[i]]=')';cout<<str<<endl;}}}else{if(R%2==1)cout<<"Impossible"<<endl;else{for(int i=0; i<R/2; i++)str[pp[i]]='(';for(int i=R/2; i<R; i++)str[pp[i]]=')';cout<<str<<endl;}}}}return 0;
    }

H - Streets of Working Lanterns Gym - 101149H -括号匹配-栈模拟相关推荐

  1. 括号配对问题----栈模拟

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  2. NyistOJ 2 括号匹配(栈)

    NyistOJ 2 括号匹配 简单的栈的应用问题,利用STL中的栈来解决,当然-也可以自己手写栈.思路就是遇到左括号进栈,遇到右括号首先判断栈是否为空,若为空直接将这个右括号进栈,当然此时也就不匹配了 ...

  3. 括号匹配(栈和队列)

    #include<iostream> #include<stack> #include<string> using namespace std; int main ...

  4. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  5. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  6. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  7. CCF NOI1113 括号匹配

    问题链接:CCF NOI1113 括号匹配. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 给定一个只包含左右括号的合法括号序列,按右括号从左到右的顺序输出每一对配对的括号出 ...

  8. hdu4915 判断括号匹配

    题意:       问你括号匹配是否唯一,三种字符'(','?',')',问号可以变成任何字符. 思路:       首先我们要学会判断当前串是否成立?怎么判断?我的方法是跑两遍,开三个变变量 s1 ...

  9. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

最新文章

  1. linux下如何修改系统时间
  2. 23日晚西湖大学鞠峰报告:环境微生物宏基因组学
  3. 推荐系统--揭开推荐的神奇面纱
  4. html5视频播放自定义视频播放暂停,解决暂停按钮在视频画面中的问题
  5. pandas中read_csv的缺失值处理
  6. Linux系统隐藏鼠标指针,如何在Linux / X11下隐藏鼠标指针?
  7. html中svg修改背景颜色,如何更改SVG图像中的背景颜色?
  8. [Office] 公务员WPS Excel常用的一些技巧方法
  9. php sendmail 抄送,Python发送邮件各种姿势
  10. Win11触摸键盘如何开启?
  11. java项目-第90期基于ssm的嘟嘟二手书商城系统
  12. linux 的源码怎么查看,查看linux源代码
  13. java实现html页面转pdf解决方案_[Java教程]纯js实现html转pdf
  14. 龙之谷服务器更新文件,全区全服 维护结束 更新至Ver.417
  15. 你需要掌握的 Koa 洋葱模型和中间件
  16. webpack 3.0 + 从切图仔到前端工程师-姜威-专题视频课程
  17. 五一出行!如何辨别偷拍设备
  18. Chapter 1 复杂度分析和递归分析
  19. 系统流量变化的原因与微型气泵的关系
  20. Java类和对象小结

热门文章

  1. 解决0x00000001电脑蓝屏问题
  2. S3C2440之IIC裸机驱动
  3. 动视密码要输入8个字符怎么解决
  4. 缺少链接库 : /bin/ld: cannot find -lxxx
  5. 华为M3平板升级鸿蒙系统,华为m3平板 日版刷国行 没有重力感应怎么解决?(篇二)...
  6. 如何选取 android 系统上的编译工具链
  7. SSLOJ2895 购买干草
  8. GNU ARM汇编--(二十)总结
  9. macOS 安装 brew步骤
  10. QQ用户的帐号和密码安全