2019 计蒜之道 复赛 E. 撑起信息安全“保护伞” (贪心,构造,规律)
为了给全球小学员打起信息安全“保护伞”,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之后的位置,在保证合法的前提下尽量让左括号靠前。
细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
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;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
char s[maxn];
int len;
char pre[maxn];
char Next[maxn];
void solvepre()
{
int pos;
for(int i=len-1;i>=1;--i)
{
if(s[i]=='('&&s[i-1]==')')
{
pos=i;
break;
}
}
// )(
int num=len/2;
int cnt=0;
rep(i,0,pos-1)
{
if(s[i]=='(')
cnt++;
else
cnt--;
pre[i]=s[i];
}
pre[pos-1]='(';
pre[pos]=')';
repd(i,pos+1,len-1)
{
if(cnt)
{
cnt--;
pre[i]=')';
}else
{
pre[i]='(';
cnt++;
}
}
pre[len]='\0';
cout<<pre<<endl;
}
void solvenext()
{
//()
//)(
int pos;
int num=0;
rep(i,0,len)
{
if(num>=1&&s[i]=='('&&s[i+1]==')')
{
pos=i;
}
if(s[i]=='(')
{
num++;
}else
{
num--;
}
}
swap(s[pos],s[pos+1]);
int cnt=0;
repd(i,0,pos+1)
{
if(s[i]=='(')
{
cnt++;
}
}
cnt=len/2-cnt;
repd(i,pos+2,len-1)
{
if(cnt>0)
{
s[i]='(';
cnt--;
}else
{
s[i]=')';
}
}
s[len]='\0';
cout<<s<<endl;
}
int main()
{
//freopen("D:\\code\\text\\input.txt","r",stdin);
//freopen("D:\\code\\text\\output.txt","w",stdout);
gbtb;
cin>>s;
len=strlen(s);
solvepre();
solvenext();
return 0;
}
inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '0');
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 - ch + '0';
}
}
else {
*p = ch - '0';
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 + ch - '0';
}
}
}
2019 计蒜之道 复赛 E. 撑起信息安全“保护伞” (贪心,构造,规律)的更多相关文章
- 2019 计蒜之道 复赛 B. 个性化评测系统 (模拟,实现,暴搜)
24.02% 1000ms 262144K "因材施教"的教育方式自古有之,互联网时代,要实现真正意义上的个性化教育,离不开大数据技术的扶持.VIPKID 英语 2020 多万学员 ...
- 2019 计蒜之道 复赛 D. “星云系统”(单调栈)
VIPKID 是在线少儿英语教育平台,网络稳定是在线教育课程质量的红线,VIPKID 为此推出了全球最稳定的教育网络系统 -- "星云系统".星云系统目前建立了覆盖全球 3535 ...
- 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)
贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于 ...
- 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治
链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd ...
- 2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK
题源:https://nanti.jisuanke.com/t/11215 分析:这题是一个比较经典的网络流模型.把中间节点当做源,两端节点当做汇,对节点进行拆点,做一个流量为 22 的流即可. 吐槽 ...
- 2016计蒜之道复赛B题:联想专卖店促销
题解 思路: 二分答案,设我们要check的值为x. 注意到每一个礼包都有,一个U盘,一个鼠标. 剩余的,分别为一个机械键盘,一个U盘,一个鼠标. 当礼包数目为x时,我们至多可以提供a-x个普通,b- ...
- 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)
题意 题目链接 Sol 首先一个结论:floyd算法的正确性与最外层\(k\)的顺序无关(只要保证是排列即可) 我大概想到一种证明方式就是把最短路树上的链拿出来,不论怎样枚举都会合并其中的两段,所以正 ...
- 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K 腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...
- 2019计蒜之道初赛3 D. 阿里巴巴协助征战SARS(困难)(大数取余+欧拉降幂)
阿里巴巴协助征战SARS(困难) 33.29% 1000ms 262144K 目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA 的一条单链中,胞嘧啶.腺嘧啶均 ...
随机推荐
- vue注
1.vue-cli3创建运行项目: vue-cli3可视化创建项目: vue ui vue-cli3创建项目:vue create elementUI(elementUI为项目名称) vue-cli3 ...
- 惠普DL360G6安装ESXi主机后设置多块网卡
需要先把服务器的网线连接到路由器 然后打开esxi设置网络的netwoork adapters 选中多块网卡,点确定保持 然后在到esxi客户端操作: 直接下一步 这里填上路由器分配的网段ip即可了
- QbztDay1游记
qbzt爆零记Day1 T1 我们为什么不把这个机器人直接报废掉呢? 素质题目 其实这就是个膜你模拟 坑点: 如果走到了水池并掉进去了,位置并不是水池前面的格子,而是执行这条指令之前的位置 来自老师的 ...
- 测试-修补程序-Hotfix:百科
ylbtech-测试-修补程序-Hotfix:百科 1.返回顶部 1. Hotfix是微软公司研发的一个程序,针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安全问题,通常称为修补程序. ...
- 设计模式(4): 给组件实现单独的store
概述 最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用. 组件自身的store 我们在开发组件的时候,时常都有这种需求,就是希望 ...
- VS2010远程调试C#程序
场景: 客户的计算机运行程序出现异常,由于办公场所不在一起,无法直接在客户的机器上调试.此时希望可以直接在开发人员的计算机(本地机器)上远程调试客户机上的软件. 假设: 本地机器的系统账户为 GIS, ...
- C—LINQ小结
LINQ代表语言集成查询(Language-Integrated Query),它包括用于从数据源检索信息的一组功能.数据检索是许多程序的重要组成功能. 简介:System.Linq; var num ...
- 03.大型数据库应用技术课堂测试3(java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V)
本次问题主要出在了之前没有安装hive,结构导致大部分时间花在了安装上面,主要一直报错,网上找不到相关教程.
- 关于WordPress中字体加载慢的问题解决方案(转)
2016-04-15 最近发现Wordpress有时候加载的特别慢,于是就想办法找了下原因.之前听网上说是因为wordpress用的是Google的字体库,而且是每次都要加载,导致访问慢的,于是当时装 ...
- 关于mysql中修改某个字段类型,以及备份表中数据到新建的表中,从新建的表中移除数据到修改过的表中
1:修改表中某个字段的类型 alter table usertable MODIFY dddd VARCHAR(50); 其中MODIFY是指修改表中字段的属性 alter表示修改表的意思 2:备份表 ...