这道题就是按照题意模拟做出来的,主要是数据量很小。通过输入的p可以确定括号序列,然后按照次序注意处理,左括号压栈,右括号入栈,同时统计w值。
1068 | Accepted | 248K | 16MS | C++ | 1314B |
/*
ID: thestor1
LANG: C++
TASK: poj1068
*/
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <limits>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cassert>
using namespace std;
const int MAXN = 100;
int main()
{
std::ios::sync_with_stdio(false);
std::vector<int> parentheses(MAXN, 0);
int T;
cin >> T;
for (int t = 0; t < T; ++t)
{
int n;
cin >> n;
int k = 0, p0 = 0;
for (int i = 0; i < n; ++i)
{
int p;
cin >> p;
for (int j = 0; j < p - p0; ++j)
{
parentheses[k] = 1;
k++;
}
parentheses[k] = 0;
k++;
p0 = p;
}
n = 2 * n;
// cout << "parentheses:";
// for (int i = 0; i < n; ++i)
// {
// cout << parentheses[i];
// }
// cout << endl;
stack<int> st;
for (int i = 0; i < n; ++i)
{
// left parenthese
if (parentheses[i])
{
st.push(i);
}
else
{
int left = st.top();
st.pop();
int cnt = 1;
for (int j = left + 1; j < i; ++j)
{
if (parentheses[j] == 0)
{
cnt++;
}
}
cout << cnt << " ";
}
}
cout << endl;
}
return 0;
}