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