括号匹配,看懂题意就可以做出来。1a还是蛮开心的
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
int n;
bool p[50];//'(':false ')':true
void readp()
{
memset(p,false,sizeof(p));
int i,Pseq[25],j;
for(i=0;i<n;i++)
scanf("%d",&Pseq[i]);
i=1;
for(j=0;j<Pseq[0];)
p[j++]=false;
p[j++]=true;
//printf("%d\n",i);
for(;i<n;i++)
if(Pseq[i]>Pseq[i-1])
{
int k=Pseq[i]-Pseq[i-1];
//printf("%d\n",k);
while(k--)
p[j++]=false;
p[j++]=true;
}
else
p[j++]=true;
//printf("%d\n",j);
//for(i=0;i<n*2;i++)
//printf("%d ",p[i]);
//printf("\n");
}
void makew()
{
int i;
for(i=0;i<n*2;i++)
{
if(p[i])
{
stack<bool>S;
int ans=1;
S.push(true);
for(int j=i-1;j>=0;j--)
{
if(p[j])
{
S.push(true);
ans++;
}
else
S.pop();
if(S.empty())
{
printf("%d ",ans);
break;
}
}
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
readp();
makew();
printf("\n");
}
}