• 题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法.

  • 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后一定会有两个括号剩余,并且这两个括号要么是\(((\)要么是\())\),\()(\)是无论如何都不合法的,对于\())\),我们去找它左边的\()\)的个数贡献给答案(因为每次修改可以使[\((++\),\()--\)],所以栈中剩余的\())\)就没有了),对于\(((\)的情况也是一样的,我们只要去找它右边的\((\)就行了.

  • 代码:

    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;
    }

最新文章

  1. Spark 入门
  2. io流(详询请加qq:2085920154)
  3. codeforces 616E Sum of Remainders (数论,找规律)
  4. ytu 1304:串的简单处理(水题)
  5. ASP.NET中读取excel内容并显示
  6. Iframe的应用以及父窗口和子窗口的相互访问
  7. 使用DNSAgent拦截特定域名
  8. 写一个类时什么时候需要重写toString
  9. css的学习笔记
  10. Select下拉列表选择自动提交form表单数据
  11. tomcat部署服务乱码问题
  12. netstat -s TCP连接失败 相关统计 解释
  13. 02:MongoDB操作
  14. kylin3
  15. SPOJ 694 Distinct Substrings(不相同子串个数)
  16. 2018.08.20 loj#117. 有源汇有上下界最小流(模板)
  17. BZOJ4011 HNOI2015落忆枫音(动态规划+拓扑排序)
  18. PHP 5.3.13 memcache win 64 配置和安装
  19. pandas数据对齐
  20. wx.grid

热门文章

  1. three.js 之cannon.js物理引擎
  2. 同一个网段内所有服务器virtual_router_id设置相同的后果
  3. 面试时通过volatile关键字,全面展示线程内存模型的能力
  4. BAPI_SALESORDER_CREATEFROMDAT2 条件 定价元素
  5. SEO大杀器rendertron安装
  6. three.js cannon.js物理引擎地形生成器和使用指针锁定控件
  7. redis修改requirepass 参数 改密码
  8. 从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质
  9. SharePoint Online 站点模板中权限的设置
  10. RabbitMq消费者在初始配置之后进行数据消费