链接:http://poj.org/problem?id=1068
题意:给出一串数组:a[i]表示第i个右括号前面有几个左括号,求出每个右括号所包含的括号数
分析:模拟。根据已知的数组,模拟得到一个字符串数组,再模拟每个右括号的括号数
代码:
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=1000006;
int t;
int n;
int a[maxn];
int vis[maxn];
char s[maxn];
queue<int>q;
int main(){
scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int k=0;
for(int i=0;i<n;i++){
for(int j=0;j<a[i]-a[i-1];j++){
s[k++]='(';
}
s[k++]=')';
}
for(int i=0;i<k;i++){
if(s[i]==')'){
int cnt=0;
for(int j=i-1;j>=0;j--){
if(s[j]=='('){
if(vis[j]){
cnt++;
}else{
vis[j]=1;
q.push (cnt+1);
goto T;
}
}
}
T:;
}
}
printf("%d",q.front ());q.pop();
while(q.size ()){
printf(" %d",q.front());
q.pop ();
}
printf("\n");
}
}