当前位置: 首页 > news >正文

CF 612C. Replace To Make Regular Bracket Sequence【括号匹配】

【链接】:CF
【题意】:给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号
问你最少修改多少次,才能使得这个字符串匹配,输出次数
【分析】:
本题用到了栈。如果遇上左括号,就加进栈里。如果遇上右括号,就判断栈里的左括号是否和它匹配,不匹配就加一。不论匹不匹配,判断后都要让左括号出栈。
如果最后栈不为空,或者栈在循环结束前就为空,那么不论怎么改变,左右括号都不可能刚好匹配。
【代码】:

#include<cstdio>  
#include<cstring>  
#include<string>  
#include<iostream>  
#include<sstream>  
#include<algorithm>  
#include<utility>  
#include<vector>  
#include<set>  
#include<map>  
#include<queue>  
#include<cmath>  
#include<iterator>  
#include<stack>  
using namespace std;  
typedef __int64 LL;  
const int INF=1e9+7;  
const double eps=1e-7;  
const int maxn=1000000;  
char s[maxn+10];  
int n;  
  
bool isle(char x)  
{  
    return x=='('||x=='<'||x=='['||x=='{';  
}  
  
int cal(char x,char  y)  
{  
    if(x=='('&&y==')')  return 0;  
    if(x=='['&&y==']')  return 0;  
    if(x=='{'&&y=='}')  return 0;  
    if(x=='<'&&y=='>')  return 0;  
        return 1;  
}  
int work()  
{  
    n=strlen(s+1);  
    stack<int>st;  
    int ans=0;  
    for(int i=1;i<=n;i++)  
    {  
        char x=s[i];  
        if(isle(x))  st.push(i);  
        else  
        {  
            if(st.empty()) return -1;  
            int y=st.top();  
            st.pop();  
            ans+=cal(s[y],s[i]);  
  
        }  
    }  
  
    if(!st.empty())  return -1;  
  
    return ans;  
  
}  
int main()  
{  
    while(~scanf("%s",s+1))  
    {  
        int ans=work();  
        if(~ans)  printf("%d\n",ans);  
        else  puts("Impossible");  
    }  
    return 0;  
}  

转载于:https://www.cnblogs.com/Roni-i/p/9215710.html

相关文章:

  • 编程遇到英语必备
  • vuex的安装和入门demo
  • jQuery缩小放大触发事件
  • js进阶 11-13 jquery如何包裹元素和去除元素外的包裹
  • Linux 守护进程
  • 甲骨文解散Java Mission Control团队事件新进展
  • 内部类访问局部变量为什么要用final修饰
  • Java高级编程——选redis还是memcache,源码怎么说?
  • Python学习——文件操作和异常处理
  • radhat6.6上安装oracle12c RAC (三)
  • 复制cp 近半年【181天:2018-01-01至20180627 这段时间】图片到upoad目录下
  • javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式...
  • Spark MLlib系列(二):基于协同过滤的电影推荐系统
  • spark-submit提交Spark Streamming+Kafka程序
  • Jmeter
  • Angular 2 DI - IoC DI - 1
  • avalon2.2的VM生成过程
  • Django 博客开发教程 8 - 博客文章详情页
  • Java的Interrupt与线程中断
  • JS笔记四:作用域、变量(函数)提升
  • js对象的深浅拷贝
  • linux安装openssl、swoole等扩展的具体步骤
  • python 学习笔记 - Queue Pipes,进程间通讯
  • QQ浏览器x5内核的兼容性问题
  • 从tcpdump抓包看TCP/IP协议
  • 第十八天-企业应用架构模式-基本模式
  • 番外篇1:在Windows环境下安装JDK
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 经典排序算法及其 Java 实现
  • 前端自动化解决方案
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 【云吞铺子】性能抖动剖析(二)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)二分查找 超详细
  • (libusb) usb口自动刷新
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)linux文件内容查看
  • (转)memcache、redis缓存
  • (转)菜鸟学数据库(三)——存储过程
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net的socket示例
  • [2]十道算法题【Java实现】
  • [C++]C++类基本语法
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [CTF]2022美团CTF WEB WP
  • [C语言]——内存函数
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [hihocoder1395] 最大权闭合子图
  • [java] 23种设计模式之责任链模式
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
  • [LeetCode]Max Points on a Line