背景:做这道题的时候,完全无法理解题意,无赖使用了百度翻译,可翻译出来的东西一点也不容易理解,最后实在没办法了,就看了解题报告里面的大致题意描述。
思路:首先用vector存储括号,右括号用0表示,左括号用1表示,并在存储过程中,用另外一个vector存储下右括号在整个brackets中的位置,这样就可以少一次检索,然后在依次处理brackets数组中的元素。
学习:vector的使用。
#include <iostream>
#include <vector>
using namespace std;
vector<int> brackets,p;
int main()
{
int n;
cin>>n;
while(n--)
{
int m,j=0;
cin>>m;
while(m--)
{
int k;
cin>>k;
for(int i=j;i<k;i++)
brackets.push_back(1);
brackets.push_back(0);
p.push_back(brackets.size()-1);
j=k;
}
for(int i=0;i<p.size();i++)
{
int f=1,d=p[i],w=1;
for(j=d-1;j>=0;j--)
{
if(brackets[j]==0) {f++;w++;}
if(brackets[j]==1) f--;
if(f==0) break;
}
cout<<w<<' ';
}
cout<<endl;
brackets.clear();
p.clear();
}
return 0;
}