与括号相关的简单模拟题。题干写的是着实让我难懂,我是对着题目中对地一组数据的分析做出来的。P的来源是第i个数是从第i个左括号开始数,一直数到(从左往右数)第i个右括号(从左往右)。W的来源是从第i个右括号开始数,数到和i匹配的这个左括号。当然两个都是统计个数的。看程序。
#include<iostream>
using namespace std;
int num[21];
int ko[42];
int flag[42];
int main()
{
int t,n,i,traget;
cin>>t;
while(t--)
{
cin>>n;
for(i=1;i<=n;i++)
cin>>num[i];
for(i=1;i<=2*n;i++)
flag[i]=0;
for(i=1;i<=num[i];i++)
{
ko[i]=0;
flag[i]=1;
}
ko[num[1]+1]=1;
flag[num[1]+1]=1;
for(i=2;i<=n;i++)
{
int start;
start=i;
while(start!=num[i]+i)
{
if(flag[start]==1)
;
else {
ko[start]=0;
flag[start]=1;
}
start=start+1;
}
ko[start]=1;
flag[start]=1;
}
/*for(i=1;i<=2*n;i++)
if(ko[i]==0)
cout<<"(";
else cout<<")";
cout<<endl;*/
int count=0;
while(count!=n)
{
traget=1;
while(ko[traget]==0||flag[traget]==0)
traget=traget+1;
flag[traget]=0;
int sum=0;
traget=traget-1;
while(flag[traget]==0)
{
if(ko[traget]==0)
sum=sum+1;
traget=traget-1;
}
sum=sum+1;
flag[traget]=0;
cout<<sum<<" ";
count=count+1;
}
cout<<endl;
}
return 0;
}