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

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

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

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

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

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

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

输入格式

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

输出格式

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

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

数据规模

0< | S | \leq 10000000<∣S∣≤1000000

样例输入 复制

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

样例输出 复制

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

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

题意:



思路:

前驱 :找一个尽量靠后的位置pos,使得str[pos]'(' &&str[pos-1]') ,然后pos-1之前的所有字符不变,交换pos和pos-1的字符,然后pos之后的位置,在保证合法的前提下尽可能的让右括号靠前

后驱: 找一个尽量靠后的位置pos,使其str[pos]'('&&str[pos+1]')' ,并且交换这两个位置得到的括号后序列依然合法。则让pos 之前的位置都保持不变,交换pos和pos+1的字符。然后pos+1之后的位置,在保证合法的前提下尽量让左括号靠前。

细节见代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <queue>
  7. #include <stack>
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. #include <iomanip>
  12. #define ALL(x) (x).begin(), (x).end()
  13. #define rt return
  14. #define sz(a) int(a.size())
  15. #define all(a) a.begin(), a.end()
  16. #define rep(i,x,n) for(int i=x;i<n;i++)
  17. #define repd(i,x,n) for(int i=x;i<=n;i++)
  18. #define pii pair<int,int>
  19. #define pll pair<long long ,long long>
  20. #define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
  21. #define MS0(X) memset((X), 0, sizeof((X)))
  22. #define MSC0(X) memset((X), '\0', sizeof((X)))
  23. #define pb push_back
  24. #define mp make_pair
  25. #define fi first
  26. #define se second
  27. #define eps 1e-6
  28. #define gg(x) getInt(&x)
  29. #define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
  30. using namespace std;
  31. typedef long long ll;
  32. ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  33. ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  34. ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
  35. inline void getInt(int* p);
  36. const int maxn=1000010;
  37. const int inf=0x3f3f3f3f;
  38. /*** TEMPLATE CODE * * STARTS HERE ***/
  39. char s[maxn];
  40. int len;
  41. char pre[maxn];
  42. char Next[maxn];
  43. void solvepre()
  44. {
  45. int pos;
  46. for(int i=len-1;i>=1;--i)
  47. {
  48. if(s[i]=='('&&s[i-1]==')')
  49. {
  50. pos=i;
  51. break;
  52. }
  53. }
  54. // )(
  55. int num=len/2;
  56. int cnt=0;
  57. rep(i,0,pos-1)
  58. {
  59. if(s[i]=='(')
  60. cnt++;
  61. else
  62. cnt--;
  63. pre[i]=s[i];
  64. }
  65. pre[pos-1]='(';
  66. pre[pos]=')';
  67. repd(i,pos+1,len-1)
  68. {
  69. if(cnt)
  70. {
  71. cnt--;
  72. pre[i]=')';
  73. }else
  74. {
  75. pre[i]='(';
  76. cnt++;
  77. }
  78. }
  79. pre[len]='\0';
  80. cout<<pre<<endl;
  81. }
  82. void solvenext()
  83. {
  84. //()
  85. //)(
  86. int pos;
  87. int num=0;
  88. rep(i,0,len)
  89. {
  90. if(num>=1&&s[i]=='('&&s[i+1]==')')
  91. {
  92. pos=i;
  93. }
  94. if(s[i]=='(')
  95. {
  96. num++;
  97. }else
  98. {
  99. num--;
  100. }
  101. }
  102. swap(s[pos],s[pos+1]);
  103. int cnt=0;
  104. repd(i,0,pos+1)
  105. {
  106. if(s[i]=='(')
  107. {
  108. cnt++;
  109. }
  110. }
  111. cnt=len/2-cnt;
  112. repd(i,pos+2,len-1)
  113. {
  114. if(cnt>0)
  115. {
  116. s[i]='(';
  117. cnt--;
  118. }else
  119. {
  120. s[i]=')';
  121. }
  122. }
  123. s[len]='\0';
  124. cout<<s<<endl;
  125. }
  126. int main()
  127. {
  128. //freopen("D:\\code\\text\\input.txt","r",stdin);
  129. //freopen("D:\\code\\text\\output.txt","w",stdout);
  130. gbtb;
  131. cin>>s;
  132. len=strlen(s);
  133. solvepre();
  134. solvenext();
  135. return 0;
  136. }
  137. inline void getInt(int* p) {
  138. char ch;
  139. do {
  140. ch = getchar();
  141. } while (ch == ' ' || ch == '\n');
  142. if (ch == '-') {
  143. *p = -(getchar() - '0');
  144. while ((ch = getchar()) >= '0' && ch <= '9') {
  145. *p = *p * 10 - ch + '0';
  146. }
  147. }
  148. else {
  149. *p = ch - '0';
  150. while ((ch = getchar()) >= '0' && ch <= '9') {
  151. *p = *p * 10 + ch - '0';
  152. }
  153. }
  154. }

2019 计蒜之道 复赛 E. 撑起信息安全“保护伞” (贪心,构造,规律)的更多相关文章

  1. 2019 计蒜之道 复赛 B. 个性化评测系统 (模拟,实现,暴搜)

    24.02% 1000ms 262144K "因材施教"的教育方式自古有之,互联网时代,要实现真正意义上的个性化教育,离不开大数据技术的扶持.VIPKID 英语 2020 多万学员 ...

  2. 2019 计蒜之道 复赛 D. “星云系统”(单调栈)

    VIPKID 是在线少儿英语教育平台,网络稳定是在线教育课程质量的红线,VIPKID 为此推出了全球最稳定的教育网络系统 -- "星云系统".星云系统目前建立了覆盖全球 3535 ...

  3. 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)

    贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于  ...

  4. 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治

    链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd ...

  5. 2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK

    题源:https://nanti.jisuanke.com/t/11215 分析:这题是一个比较经典的网络流模型.把中间节点当做源,两端节点当做汇,对节点进行拆点,做一个流量为 22 的流即可. 吐槽 ...

  6. 2016计蒜之道复赛B题:联想专卖店促销

    题解 思路: 二分答案,设我们要check的值为x. 注意到每一个礼包都有,一个U盘,一个鼠标. 剩余的,分别为一个机械键盘,一个U盘,一个鼠标. 当礼包数目为x时,我们至多可以提供a-x个普通,b- ...

  7. 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)

    题意 题目链接 Sol 首先一个结论:floyd算法的正确性与最外层\(k\)的顺序无关(只要保证是排列即可) 我大概想到一种证明方式就是把最短路树上的链拿出来,不论怎样枚举都会合并其中的两段,所以正 ...

  8. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)

    B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K   腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...

  9. 2019计蒜之道初赛3 D. 阿里巴巴协助征战SARS(困难)(大数取余+欧拉降幂)

    阿里巴巴协助征战SARS(困难) 33.29% 1000ms 262144K   目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA 的一条单链中,胞嘧啶.腺嘧啶均 ...

随机推荐

  1. jdbcType="DATE"和jdbcType=" TIMESTAMP"的区别

    原文: https://www.cnblogs.com/fswhq/p/jdbcType.html 当传入null值时,jdbcType 会防止null空指针异常报错 Mybatis 中jdbcTyp ...

  2. Windows下启动.Net Core程序脚本

    @echo offstart cmd /k "cd /D %~dp0&&dotnet xxx.dll" cmd /k 是执行完dir命令后不关闭命令窗口 cd /d ...

  3. rtmpdump禁用openssl

    rtmpdump禁用openssl 主要是编译方便 很多地方根本不需要用openssl 先找到librtmp/rtmp_sys.h 然后加入宏#define NO_CRYPTO在#ifdef _WIN ...

  4. java内存分布详解

    参见:http://blog.csdn.net/bluetjs/article/details/52874711 基本类型和引用类型.二者作为局部变量,都放在栈中,基本类型直接在栈中保存值,引用类型只 ...

  5. 一、基础篇--1.1Java基础-自定义注解的场景及实现

    自定义注解使用场景: 类属性自动赋值,例如对上下文.传入参数等赋值 验证对象属性完整性,例如,对参数的校验 代替配置文件功能,像spring基于注解的配置 可以生成文档,例如java 最早提供的注解. ...

  6. vs2019安装

    1.下载vs_enterprise.exe(建议下载到无中文无空格目录) ,这个很小,官网下载企业版即可 2.在当前目录cmd命令执行: vs_enterprise.exe --layout offl ...

  7. 【MM系列】SAP MM模块-配置PO的创建时间

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-配置PO的创建时间 ...

  8. 20191127 Spring Boot官方文档学习(4.13)

    4.13.Messaging Spring框架为与消息传递系统集成提供了广泛的支持,从使用JmsTemplate简化JMS API到完整的异步接收消息的基础结构.Spring AMQP为高级消息队列协 ...

  9. [转帖]深度解析区块链POW和POS的区别

    深度解析区块链POW和POS的区别 Proof of Work 还有Proof of Stake 之前理解程了 state ... 股权的意思 还有 delegated proof of Stake ...

  10. [19/10/14-星期一] Python中的对象和类

    一.面向对象 ## 什么是对象? - 对象是内存中专门用来存储数据的一块区域. - 对象中可以存放各种数据(比如:数字.布尔值.代码) - 对象由三部分组成: 1.对象的标识(id) 2.对象的类型( ...