您的位置:首页 > 其它

zoj 1016

2017-06-12 19:39 274 查看
思路:恢复原有的字符串,对原来字符串中‘(’出现的地方记为1,在‘)’出现的地方记为-1,将这些信息均存在数组arr中

然后遍历arr,如果所遍历到的值为-1,说明对应字符串中该位置为‘)’,然后从当前位置开始,向前求元素的和,如果元素和为0,则说明刚好匹配,存储结果。最后统一输出

// C++Exercise.cpp : 定义控制台应用程序的入口点。
//

#include<iostream>
#include<string>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<sstream>
using namespace std;

int t;

int main(){
while (cin >> t){
for (int i = 0; i < t; i++){
int n;
cin >> n;
vector<int> p;
for (int j = 0; j < n; j++){
int temp;
cin >> temp;
p.push_back(temp);
}
vector<int> arr(2*n,1);
int index = p[0] + 1;
arr[p[0]] = -1;
for (int j = 1; j < p.size(); j++){
int k = p[j] - p[j - 1];
while (k){
index++;
k--;
}
arr[index] = -1;
index++;
}
vector<int> res;
for (int i = 0; i < arr.size(); i++){
if (arr[i] == 1) continue;
int amount = -1;
int countw = 0;
int cur = i;
while (amount != 0){
if (arr[cur] == -1) countw++;
cur--;
amount += arr[cur];
}
res.push_back(countw);
}
for (int i = 0; i < res.size(); i++){
cout << res[i];
if (i != res.size() - 1) cout << ' ';
else cout << endl;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: