POJ 1068 Parencodings(小模拟)

题目链接

理解好题意就没啥问题了,自己判断是否是最后一个元素想错了,导致PE两次,直接搞了个标记变量AC了。。。我用的是栈 模拟所有的元素。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int p[100001];
 4 int main()
 5 {
 6     int t,n,i,j,start,k,z;
 7     int o[21];
 8     scanf("%d",&t);
 9     while(t--)
10     {
11         memset(p,0,sizeof(p));
12         memset(o,0,sizeof(o));
13         scanf("%d",&n);
14         for(i = 1;i <= n;i ++)
15         scanf("%d",&o[i]);
16         for(j = 1;j <= o[1];j ++)
17         {
18             p[j] = 1;
19         }
20         p[j] = 2;
21         start = j+1;
22         for(i = 2;i <= n;i ++)
23         {
24            for(j = 0;j <= o[i]-o[i-1]-1;j ++)
25            {
26                p[start+j] = 1;
27            }
28            p[start+j] = 2;
29            start = start + j + 1;
30         }
31         z = 1;
32         for(i = 1;i <= start-1;i ++)
33         {
34             if(p[i] == 2)
35             {
36                 k = 0;
37                 for(j = i-1;j >= 1;j --)
38                 {
39                     if(p[j] == 1)
40                     {
41                         p[j] = 0;
42                         break;
43                     }
44                     else if(p[j] == 0)
45                     k ++;
46                 }
47                 if(z)
48                 {
49                     printf("%d",1+k);
50                     z = 0;
51                 }
52                 else
53                 printf(" %d",1+k);
54             }
55         }
56         printf("\n");
57     }
58     return 0;
59 }
posted @ 2012-07-14 16:16  Naix_x  阅读(197)  评论(0)    收藏  举报