Parencodings--POJ 1068

1、题目类型:模拟题。

2、解题思路:(1)根据输入数据建立Arr[],0表示'(',1表示')';(2)搜索为Arr[]中为 1 的位置,并找到与之相匹配的 0 ,cnt表示对应的匹配间1的个数。

3、注意事项:flag[i]标示Arr[i]是否已完成匹配;flag[]注意及时清空。

4、实现方法:

#include<iostream>
using namespace std;

int Arr[50],Psq[50];
bool flag[50];

int main()
{
int i,j,k,t,n,loc,left,cnt;
cin
>>t;
while(t--)
{
cin
>>n;
loc
=1,left=1;
memset(flag,
0,sizeof(flag));
for(i=1;i<=n;i++)
{
cin
>>Psq[i];
while(left<Psq[i])
{
Arr[
++loc]=0;
left
++;
}
Arr[
++loc]=1;
}

for(i=1;i<=2*n;i++)
{
cnt
=0;
if(Arr[i])
{
flag[i]
=true;
for(j=i-1;i>0;j--)
{
if((flag[j]==false) && (Arr[j]==0))
{
flag[j]
=true;
for(k=i;k>j;k--)
cnt
+=Arr[k];
break;
}
}
cout
<<cnt<<" ";
}
}
cout
<<endl;
}
return 1;
}

 

 

 

posted @ 2010-08-03 23:19  勇泽  阅读(550)  评论(0编辑  收藏  举报