您的位置:首页 > 其它

Treasure (BNUOJ 44540 栈应用)

2015-09-01 15:18 218 查看
题目链接

栈应用, 注意在 # 出现之后不能匹配的情况

((#)(

(#((((()

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <fstream>
using namespace std;
char str[100005];
int num[100005];
int main()
{
while(cin >> str)
{
int flag = 1;
int len = strlen(str);
int left = 0;
memset(num, 0, sizeof(num));
int n = -1;
int i;
stack <char> s;
for(i = 0; i < len; i++)
{
if(str[i] == '(')
{
s.push(str[i]);
left++;
}

if(str[i] == ')')
{
if(!s.empty())
s.pop();
else
{
flag = 0;
break;
}
if(left)
left--;
}
if(str[i] == '#')
{
if(!s.empty())
s.pop();
else
{
flag = 0;
break;
}
n++;
num
= 1;
left = 0;  //记录#之后多余(的个数
}
}
if(left > 0)
flag = 0;
while(!s.empty())
{
s.pop();
num
++;
}
if(flag == 0)
cout << -1 << endl;
else
for(i = 0; i <= n; i++)
{
cout << num[i] << endl;
}
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: