zoukankan      html  css  js  c++  java
  • [贪心+构造]撑起信息安全“保护伞”

    为了给全球小学员打起信息安全“保护伞”,VIPKID 还建立了一套立体化的安全防御体系,7 imes 247×24 小时持续安全监控与应急响应等多项联动,具备业界最高级别的数据安全保护标准。值得一提的是,VIPKID 也是行业业内唯一通过 ISO 国际信息安全体系认证、公安部信息安全等级保护三级认证的教育企业。

    现在安全防御体系就检测到了一个小问题,需要你来帮忙解决其中有关“前驱与后继”的这一部分,让我们一起来守护小学员们的信息安全吧!请看题:

    对于两个长度相等的不同的合法括号序列 SS,TT,定义他们之间的大小关系等同于他们字典序的大小关系。

    给定一个合法的括号序列 SS,求出 SS 的前驱与后继。

    SS 的前驱:所有小于 SS 的串中最大的一个。

    SS 的后继:所有大于 SS 的串中最小的一个。

    数据保证存在前驱与后继。

    输入格式

    一行一个合法括号序列 SS。

    输出格式

    第一行一个合法括号序列 pre,表示前驱。

    第二行一个合法括号序列 suf,表示后继。

    数据规模

    0< | S | leq 10000000<S1000000

    样例输入

    (()())()((()))()

    样例输出

    (()())()((())())
    (()())()(()(()))

    思路:
    求前驱:从后往前找第一个使s[i]=')',s[i+1]='('的i; i之前的括号不变,交换s[i]和s[i+1]; i之后的括号在保证合法的前提下尽可能填')'
    求后继:从后往前找第一个使s[i]='(',s[i+1]=')'并且在交换s[i],s[i+1]后序列仍合法的i; i之前的括号不变,交换s[i]和s[i+1]; i之后的括号在保证合法的前提下尽可能填'('
    AC代码:
    #include<bits/stdc++.h>
    using namespace std;
    
    char s[1000005];
    int len;
    char ans[1000005];
    
    void work1(){
      int pos;
      for(int i=len-2;i>=0;i--){
        if(s[i]==')'&&s[i+1]=='('){
            pos=i;
            break;
        }
      }
      int cnt=0;
      for(int i=0;i<pos;i++){
        if(s[i]=='(') cnt++;
        else cnt--;
        ans[i]=s[i];
      }
      ans[pos]='(',ans[pos+1]=')';
      for(int i=pos+2;i<len;i++){
        if(cnt){
          ans[i]=')';
          cnt--;
        }
        else{
          ans[i]='(';
          cnt++;
        }
      }
      ans[len]='';
      puts(ans);
    }
    
    void work2(){
      int pos,cnt=0;
      for(int i=0;i<len-1;i++){
        if(cnt&&s[i]=='('&&s[i+1]==')'){
            pos=i;
        }
        if(s[i]=='(') cnt++;
        else cnt--;
      }
      cnt=0;
      for(int i=0;i<=pos+1;i++){
        if(s[i]=='(') cnt++;
        ans[i]=s[i];
      }
      ans[pos]=')',ans[pos+1]='(';
      cnt=len/2-cnt;
      for(int i=pos+2;i<len;i++){
        if(cnt){
          ans[i]='(';
          cnt--;
        }
        else ans[i]=')';
      }
      ans[len]='';
      puts(ans);
    }
    
    int main()
    {
        scanf("%s",s);
        len=strlen(s);
        work1();
        work2();
        return 0;
    }
    View Code
  • 相关阅读:
    Odoo 库存管理-库存移动(Stock Move)新玩法
    odoo8.0+PyCharm4.5开发环境配置
    (总结)隐藏PHP版本与PHP基本安全设置
    Docker无法启动 Could not find a free IP address range for interface 'docker0' 最方便的解决办法
    MySQL Point in Time Recovery the Right Way
    The query below helps you to locate tables without a primary key:
    记一次揪心的MySQL数据恢复过程
    Linux中利用extundelete恢复误删除的数据
    Centos升级Python 2.7并安装pip、ipython
    navicat
  • 原文地址:https://www.cnblogs.com/lllxq/p/11046682.html
Copyright © 2011-2022 走看看