Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 20769 | Accepted: 12483 |
Description
q 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).
q 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).
Following is an example of the above encodings:
S (((()()()))) P-sequence 4 5 6666 W-sequence 1 1 1456
Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
Input
Output
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 61 1 2 4 5 1 1 3 9
小结:
记得刚开始学ACM的时候,做这道题目一直WA,然而这次,一次AC,看来在这半年中,我的水平还是有一些提高的...还是有点欣慰的....毕竟,这半年并不是在打酱油....刷水题能力有了很明显的提升....汗...
以下是AC代码:
#include<stdio.h> #include<string.h> int main() { int n; int item[100]; int sign[100]; scanf("%d",&n); for(int i=1;i<=n;i++) { int num; memset(item,0,sizeof(item)); memset(sign,0,sizeof(sign)); scanf("%d",&num); item[0]=0; int last=0,now=0; for(int i=1;i<=num;i++) { scanf("%d",&item[i]); last=now; now=item[i]; item[i]-=last; } int temp=0; for(int i=1;i<=num;i++) { for(int j=1;j<=item[i];j++) { sign[++temp]=1; } sign[++temp]=2; } int temp1=0,temp2=0,t=0; for(int i=1;i<=num*2;i++) { temp1=temp2=0; if(sign[i]==2) { for(int j=i-1;j>=1;j--) { if(sign[j]==1) { temp1++; temp2++; } else { temp1--; } if(temp1==1) { t++; printf("%d%c",temp2,t==num?'\n':' '); break; } } } } } return 0; }