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 }