博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
括号匹配(栈)
阅读量:3951 次
发布时间:2019-05-24

本文共 2843 字,大约阅读时间需要 9 分钟。

C. Unusual Competitions

time limit per test

1 second

memory limit per test

512 megabytes

input

standard input

output

standard output

A bracketed sequence is called correct (regular) if by inserting "+" and "1" you can get a well-formed mathematical expression from it. For example, sequences "(())()", "()" and "(()(()))" are correct, while ")(", "(()" and "(()))(" are not.

The teacher gave Dmitry's class a very strange task — she asked every student to come up with a sequence of arbitrary length, consisting only of opening and closing brackets. After that all the students took turns naming the sequences they had invented. When Dima's turn came, he suddenly realized that all his classmates got the correct bracketed sequence, and whether he got the correct bracketed sequence, he did not know.

Dima suspects now that he simply missed the word "correct" in the task statement, so now he wants to save the situation by modifying his sequence slightly. More precisely, he can the arbitrary number of times (possibly zero) perform the reorder operation.

The reorder operation consists of choosing an arbitrary consecutive subsegment (substring) of the sequence and then reordering all the characters in it in an arbitrary way. Such operation takes ll nanoseconds, where ll is the length of the subsegment being reordered. It's easy to see that reorder operation doesn't change the number of opening and closing brackets. For example for "))((" he can choose the substring ")(" and do reorder ")()(" (this operation will take 22 nanoseconds).

Since Dima will soon have to answer, he wants to make his sequence correct as fast as possible. Help him to do this, or determine that it's impossible.

Input

The first line contains a single integer nn (1≤n≤1061≤n≤106) — the length of Dima's sequence.

The second line contains string of length nn, consisting of characters "(" and ")" only.

Output

Print a single integer — the minimum number of nanoseconds to make the sequence correct or "-1" if it is impossible to do so.

Examples

input

Copy

8))((())(

output

Copy

6

input

Copy

3(()

output

Copy

-1

Note

In the first example we can firstly reorder the segment from first to the fourth character, replacing it with "()()", the whole sequence will be "()()())(". And then reorder the segment from the seventh to eighth character, replacing it with "()". In the end the sequence will be "()()()()", while the total time spent is 4+2=64+2=6 nanoseconds.

【方法】

括号匹配遇到好几次了,,但每次好像都没有通法,,题目要求变成匹配的括号,,给未匹配的排序,,已经匹配的不用排了,首先如果左右括号不相等的话肯定不行,,考虑当前字符是否是’(’,如果是的话,看栈顶元素是否是’)’,如果是的话,这说明可以将这两个字符排序可以正确匹配,所以我们将sum++,并且删除栈顶元素;不是的话就将’(‘入栈。

如果当前元素是’)’ ,看栈顶是否是’('是的话就删除栈顶元素(因为这个是已经排好了,不用动了);否则入栈。

#include 
using namespace std;int cnt[2];int main(){ ios::sync_with_stdio(false); int n; cin>>n; string s; cin>>s; stack
q; for(int i=0;i

 

 

转载地址:http://styzi.baihongyu.com/

你可能感兴趣的文章
lower_bound和upper_bound
查看>>
Subsequence POJ - 3061 ( 尺取法 )
查看>>
常见HTTP状态码大全
查看>>
这16个数据可视化案例,惊艳了全球数据行业
查看>>
大数据死亡率报告揭秘:SUV与轿车到底谁更危险?
查看>>
2017年网络流行语TOP20 , 没用过算我输!
查看>>
看完这13张图,不得不佩服还是外国人会玩人工智能
查看>>
从零开始用Python构造决策树(附公式、代码)
查看>>
精华 | 12个关键词告诉你告诉你什么是机器学习(基础篇)
查看>>
15个优秀的开源项目,让你轻松应对Android开发
查看>>
正态分布为什么常见?
查看>>
大数据下的帝都魔都的爱恨情仇
查看>>
GitHub最著名的20个Python机器学习项目!
查看>>
小白都能看懂的神经网络入门,快收下吧~
查看>>
当白帽黑客遇到了网络诈骗,他是如何套路并反制骗子的?
查看>>
手把手教你36小时搭建无人超市系统 !(附代码)
查看>>
2017新生儿爆款名字出炉!90后的父母们最受欢迎的居然是.....
查看>>
全景图解高铁数据,谁是最有潜力的高铁城市?
查看>>
张小龙现场“约战”跳一跳,发布2018微信全新计划(内附演讲全文)
查看>>
爬取电影天堂的最新电影
查看>>