#587. 天天和不可描述

Posted xiongchongwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#587. 天天和不可描述相关的知识,希望对你有一定的参考价值。

【题目描述】:

天天和()是好朋友,然而总是唱反调。对于一个有() 的字符串,天天总是会把()内的所有东西都倒过来读。

比如对于字符串abc(def) ,天天看到的就是abcfed 。

括号里面可能是空的,也有可能套有多个括号,比如说abc(hello)(world)lcy()x(owq(zrt)),天天看到的就是abcollehdlrowlcyxzrtqwo 。

因为(owq(zrt))首先变成了(trz)qwo ,接下来变成了zrtqwo ,zrt 被反转了两次,所以天天看到的还是zrt。

现在给你一个字符串,问你天天看到的是什么样子的?

【输入描述】:

一行一个字符串,表示原始的字符串。保证字符串内只有小写字母和(以及)组成。保证括号总是配对的。

【输出描述】:

一行一个字符串,表示天天看到的字符串。

【样例输入1】:

abc(hello)(world)lcy()x(owq(zrt))

【样例输出1】:

abcollehdlrowlcyxzrtqwo

【样例输入2】:

(y(g(el)da)nis)

【样例输出2】:

singleday

【样例输入3】:

mian()

【样例输出3】:

mian

【时间限制、数据范围及描述】:

时间:1s 空间:256M

对于10% 的数据,保证只出现一对括号,字符串长度小于100,000。

对于另外30% 的数据,保证字符串长度小于100。

对于另外40% 的数据,保证字符串长度小于100,000。

对于剩余的20% 的数据,保证字符串长度小于500,000。

 

 

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
int a[500610],b[500610],j;
char s[500610];
stack<int> q;
void work(int l,int r,int t){
	if(t%2==0){
		for(int i=l;i<=r;i++){
			if(s[i]!=‘(‘&&s[i]!=‘)‘){
				printf("%c",s[i]);
			}
			else if(s[i]==‘(‘){
				work(i+1,a[i]-1,t+1);
				i=a[i];
			}
		}
		return;
	}
	if(t%2==1){
		for(int i=r;i>=l;i--){
			if(s[i]!=‘(‘&&s[i]!=‘)‘){
				printf("%c",s[i]);
			}
			else if(s[i]==‘)‘){
				work(b[i]+1,i-1,t+1);
				i=b[i];
			}
		}
	}
	return;
}
int main(){
	scanf("%s",s+1);
	int len=strlen(s+1);
	for(int i=1;i<=len;i++){
		if(s[i]==‘(‘){
			q.push(i);
		}
		if(s[i]==‘)‘){
			a[q.top()]=i;
			b[i]=q.top();
			q.pop();
		}
	}
	work(1,len,0);
	return 0;
}

  

以上是关于#587. 天天和不可描述的主要内容,如果未能解决你的问题,请参考以下文章

tyvj P4868天天和不可描述

noip模拟赛 天天和不可描述

从Oracle存储过程Oracle 11g发送邮件

无法握手具有端口 587 和 server="smtp.gmail.com" 的 ssl 套接字

Day587.图 -数据结构和算法Java

Android 发送自定义电子邮件 STARTTLS 端口 587