Parencodings

Parencodings

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 13   Accepted Submission(s) : 7
Problem Description
Let S = s1 s2 … s2n be a well-formed string of parentheses. S can be encoded in two different ways: [ul] [li]By an integer sequence P = p1 p2 … pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).[/li] [li]By an integer sequence W = w1 w2 … wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).[/li] [/ul] Following is an example of the above encodings: [pre] S (((()()()))) P-sequence 4 5 6666 W-sequence 1 1 1456 [/pre] Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
 

 

Input
The first line of the input file contains a single integer t (1 t 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 n 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.
 

 

Output
The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.
 

 

Sample Input
2 6 4 5 6 6 6 6 9 4 6 6 6 6 8 9 9 9
 

 

Sample Output
1 1 1 4 5 6 1 1 2 4 5 1 1 3 9
 

 

Source
2001 Asia Regional Teheran
 
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int T,num,i,j,sign,sum,K,k,z,tend,alto;
 7     scanf("%d",&T);
 8     while(T--)
 9     {
10         int a[1000]={0},b[1000],c[1000]={0};
11         scanf("%d %d",&num,&sign);
12         a[sign]+=1;
13         b[0]=sign;
14         getchar();
15         for(i=sign+1,j=1,k=1;j<num;j++,i++)
16         {
17 
18             scanf("%d",&sum);
19             if(sign==sum)
20             {
21                 a[i]+=1;
22                 b[k]=i;
23                 k++;
24             }
25             else
26             {
27                 K=sum-sign;
28                 a[i+K]+=1;
29                 b[k]=i+K;
30                 k++;
31                 i=i+K;
32             }
33             sign=sum;
34         }
35 
36         for(j=0;j<k;j++)
37             for(z=b[j]-1,tend=1;z>=0;z--)
38             {
39                 if(a[z]==1)
40                     continue;
41                 else
42                 {
43                     if(a[z]==0)
44                     {a[z]='N';c[j]+=1;break;}
45                     else
46                     {
47                         if(a[z]=='N')
48                         {
49                             c[j]+=1;
50                         }
51                             continue;
52                     }
53                 }
54             }
55         for(j=0;j<k;j++)
56         {
57                 printf("%d",c[j]);
58             if(j!=k-1)
59             putchar(' ');
60         }
61         putchar('\n');
62     }
63     return 0;
64 
65 }
View Code

 

posted @ 2014-05-24 19:58  Wurq  阅读(215)  评论(0编辑  收藏  举报