T1
为什么要写这个题呢?
我只是想说:链表也能做!!
QAQAQ
可是……细节什么的考场写的好晕……
(其实我不想解释代码了QAQAQ
Codes:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int N = 100000 + 10; char s[N]; int ans,ans1,ans2; int pre[N],nxt[N]; int main(){ //freopen("shower.in","r",stdin); //freopen("shower.out","w",stdout); scanf("%s",s + 1); int len = strlen(s + 1); for(int i = 1;i <= len;++ i){ pre[i] = i - 1; nxt[i - 1] = i; } nxt[len] = len + 1; pre[len + 1] = len; if(s[1] != ‘(‘) ans ++; if(s[len] != ‘)‘) ans ++; s[1] = ‘(‘,s[len] = ‘)‘; for(int i = 1;i < len;i = nxt[i]){ if(pre[i] == 0 && s[i] == ‘)‘){ ans ++; s[i] = ‘(‘; } if(nxt[i] == len + 1 && s[i] == ‘(‘){ ans ++; s[i] = ‘)‘; } if(s[nxt[i]] == ‘)‘ && s[i] == ‘(‘){ nxt[pre[i]] = nxt[nxt[i]]; pre[nxt[nxt[i]]] = pre[i]; } if(s[pre[i]] == ‘(‘ && s[i] == ‘)‘){ nxt[pre[pre[i]]] = nxt[i]; pre[nxt[i]] = pre[pre[i]]; } } int sum = 0; for(int i = 0;i < len + 1;i = nxt[i]){ if(s[nxt[i]] == ‘(‘){ sum ++; } } cout << ans + (sum / 2) << ‘\n‘; return 0; }
时间: 2024-08-01 17:10:09