思路:构造模式+字符串匹配。
P-sequence:第i个数字代表第i个右括号前面有多少个左括号。
W-sequence:第i个数字代表第i个右括号和它前面第几个左括号匹配。
先根据P-sequence构造S,再用S去得出W-sequence。
#include<iostream>
using namespace std;
int casenum=0;
int main()
{
int i,j,num;
cin>>casenum;
for(i=0;i<casenum;i++)
{
cin>>num;
int a,loc=0,left=0,right=0;
//construct s according p-sequence
char s[40];
bool flag[40]={false};
for(j=0;j<num;j++)
{
cin>>a;
while(left<a)
{
s[loc++]='(';
left++;
}
flag[loc]=true;
s[loc++]=')';
}
//calculate w-sequence according s
int temp;
int count=0;
for(j=0;j<loc;j++)
{
if(s[j]==')')
{
count++;
for(temp=j-1;temp>=0;temp--)
{
if(s[temp]==')')
{
right++;
}
if(flag[temp]==false)
{
if(count==left)
{
cout<<j-temp-right<<endl;
}
else
{
cout<<j-temp-right<<" ";
}
//cout<<j-temp-right<<" ";
flag[temp]=true;
break;
}
}
right=0;
}
}
}
//system("pause");
return 0;
}