cf——C. Serval and Parenthesis Sequence

括号正确匹配问题,应该不难

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <map>
 5 #include <set>
 6 #include <algorithm>
 7 #include <fstream>
 8 #include <cstdio>
 9 #include <cmath>
10 #include <stack>
11 #include <queue>
12 using namespace std;
13 const double Pi=3.14159265358979323846;
14 typedef long long ll;
15 const int MAXN=300000+5;
16 const int dx[5]={0,0,0,1,-1};
17 const int dy[5]={1,-1,0,0,0};
18 const int INF = 0x3f3f3f3f;
19 const int NINF = 0xc0c0c0c0;
20 const ll mod=1e9+7;
21 
22 char a[MAXN];
23 int main()
24 {
25     int n;cin>>n;
26     cin>>a;
27     int cur=0;int c=0;
28     if(n%2) 
29     {
30         printf(":(\n");
31         return 0;
32     }
33     for(int i=0;i<n;i++)
34     {
35         if(a[i]=='(') cur++;
36             else if(a[i]==')') cur--;
37                 else c++;
38     }
39     int l=(c-cur)/2;
40     int r=(cur+c)/2;
41     for(int i=0;i<n;i++)
42     {
43         if(a[i]=='?')
44         {
45             if(l)
46             {
47                 a[i]='(';
48                 l--;
49             }
50             else 
51             {
52                 a[i]=')';
53                 r--;
54             }
55         }
56     }
57     if(l!=0||r!=0) 
58     {
59         printf(":(\n");
60         return 0;
61     }
62      cur=0;
63     for(int i=0;i<n;i++)
64     {
65         
66         if(a[i]=='(')
67         {
68             cur++;
69         }
70         else if(a[i]==')')
71         {
72             cur--;
73         }
74         if(cur<=0&&i!=n-1)
75         {
76             printf(":(\n");
77             return 0;
78         }
79     }
80     
81     if(cur==0)    printf("%s",a);
82         else printf(":(\n");
83     return 0;
84 }

 

的,但是比赛的时候完全没啥思路。对于括号匹配问题,一定要想到有右括号的话就可以消左括号。

posted @ 2019-04-14 10:46  Chuhanjing  阅读(343)  评论(0编辑  收藏  举报