1. 程式人生 > >POJ 1068(模擬)

POJ 1068(模擬)

mat while span argv == 記錄 spa mes ack

用1代表左括號,0代表右括號。掃一遍,掃到0的時候,往前掃,直到在這個情況下0和1的個數相等,記錄。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 using namespace std;
10 int main(int
argc, char *argv[]) 11 { 12 int t,n,a[30],b[100],c[30]; 13 scanf("%d",&t); 14 while(t--) 15 { 16 scanf("%d",&n); 17 for(int i=1;i<=n;i++) 18 { 19 scanf("%d",&a[i]); 20 } 21 int ans=0;a[0]=0; 22 for(int i=1;i<=n;i++)
23 { 24 for(int j=ans;j<ans+a[i]-a[i-1];j++) 25 { 26 b[j]=1; 27 } 28 ans+=a[i]-a[i-1]; 29 b[ans++]=0; 30 } 31 int sum=0; 32 for(int i=0;i<ans;i++) 33 { 34 if(b[i]==0) 35 {
36 int s0,s1;s0=1;s1=0; 37 for(int j=i-1;j>=0;j--) 38 { 39 if(b[j]==0) 40 s0++; 41 else 42 s1++; 43 if(s0==s1) 44 { 45 c[sum++]=s0; 46 break; 47 } 48 } 49 } 50 } 51 for(int i=0;i<sum;i++) 52 { 53 printf("%d",c[i]); 54 if(i!=sum-1) 55 printf(" "); 56 } 57 printf("\n"); 58 59 } 60 return 0; 61 }

POJ 1068(模擬)