巢穴

about:blank

P1068

   模拟
   根据第一数列推出括号序列
   然后根据序列得出第二个数列
   
#include <iostream>
using namespace std;

const int MAXN=21;
int p[MAXN],w[MAXN];
char ch[MAXN*2];
int t;
int main()
{
    cin
>>t;
    
while(t--)
    
{
     
int n;
     cin
>>n;
     
for (int i=1;i<=n;++i)
         cin
>>p[i];
     
int top=0;
     
for (int i=1;i<=p[1];++i)
          ch[
++top]='(';
     ch[
++top]=')';
     
for (int i=2;i<=n;++i)
     
{
         
if (p[i]>p[i-1])
            
{
             
for (int j=1;j<=p[i]-p[i-1];++j)  
                 ch[
++top]='(';
             ch[
++top]=')';
            }

            
else
                ch[
++top]=')';
     }
   
     
     top
=0;
     
int count;
     
for (int i=1;i<=2*n;i++)
     
{
   
//   cout<<ch[i];
      if (ch[i]=='('continue;
      top
++;
      count
=0;
      
int tmp=0;
      
      
for (int j=i-1;j>=1;--j)
      
{
       
if (ch[j]=='(')
       
{
        
if (tmp==0)
        
{
         w[top]
=count+1;
         
break;
        }

        
else
        
{
         tmp
--;
        }

       }

       
else
       
{
        tmp
++;
        count
++;
       }

      }

     }

     
for (int i=1;i<=n;i++)
         cout
<<w[i]<<" ";
     cout
<<endl;
   
//  system("pause");
    }

    
return 0;
}


posted on 2009-10-03 15:28 Vincent 阅读(90) 评论(0)  编辑 收藏 引用 所属分类: 数据结构与算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理