hdu 1361 Parencodings

再次鄙视一下自己的英语水平,竟然没读懂题,好吧,我要学英语~~

这题很简单,数据给的也很小,只要简单的模拟就过了,意思是:

由括号序列S可经P规则和W规则变形为P序列和W序列。

p规则是:pi是第i个右括号左边的左括号的数;

w规则是:wi是第i右括号与它匹配的左括号之间右括号的数(其中包括它本身)。

代码:

 1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 int p[25],s[25];
5 char str[55];
6 int main()
7 {
8 int t,n,i,j,k;
9 scanf("%d",&t);
10 while(t--)
11 {
12 scanf("%d",&n);
13 p[0]=0;
14 for(i=1;i<=n;i++)
15 scanf("%d",&p[i]);
16 for(i=1,k=0;i<=n;i++)
17 {
18 int m=p[i]-p[i-1];
19 for(j=1;j<=m;j++)
20 str[k++]='(';
21 str[k++]=')';
22 }
23 int f[55];
24 memset(f,0,sizeof(f));
25 int m=0;int l=0;
26 for(i=0;i<k;i++)
27 {
28 if(str[i]==')')
29 {
30 for(j=i-1;j>=0;j--)
31 if(str[j]=='(')
32 {
33 if(!f[j])
34 {
35 f[j]=1;
36 l++;
37 break;
38 }
39 else
40 l++;
41 }
42 s[m++]=l;
43 l=0;
44 }
45 }
46 for(i=0;i<m;i++)
47 {
48 if(i)
49 printf(" %d",s[i]);
50 else
51 printf("%d",s[i]);
52 }
53 printf("\n");
54 }
55 return 0;
56 }
原文地址:https://www.cnblogs.com/misty1/p/2294208.html