Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Nurzhan Yergozhin (guess)
- Submitted: Sat, Nov 17, 2012 10:41:58 EST
- /*
- LANG : C++
- PROG : typo
- */
- # include <iostream>
- # include <cstring>
- # include <algorithm>
- # include <cstdio>
- # include <cstdlib>
- # include <stack>
- using namespace std;
- const int N = 1000000;
- string s;
- int l[N][3], r[N][3], len, ans, ul[N][3], ur[N][3];
- stack <int> st;
- int main () {
- freopen("typo.in", "r", stdin);
- freopen("typo.out", "w", stdout);
- cin >> s;
- len = s.size();
- for (int i = 0; i < len; ++i) {
- if(s[i] == '(') st.push(i);
- else if(st.size() > 0 && s[i] == ')') st.pop();
- else if(st.size() == 0 && s[i] == ')') {
- l[i][2] ++; ul[i][2] = 1;
- }
- l[i][1] = st.size();
- l[i][2] += (i ? l[i - 1][2] : 0);
- }
- while(!st.empty()) st.pop();
- for (int j = len - 1; j >= 0; --j) {
- if(s[j] == ')') st.push(j);
- else if(st.size() > 0 && s[j] == '(') st.pop();
- else if(st.size() == 0 && s[j] == '(') {
- r[j][2] ++; ur[j][2] = 1;
- }
- r[j][1] = st.size();
- r[j][2] += r[j + 1][2];
- }
- for (int i = 0; i < len; ++i) {
- // cout << l[i][1] << ' ' << l[i][2] << ' ' << r[i][1] << ' ' << r[i][2] << endl;
- if(s[i] == '(') {
- int cntl = (i ? l[i - 1][1] : 0);
- int cnt2 = (i ? l[i - 1][2] : 0);
- if(cntl == r[i + 1][1] + 1 && r[i + 1][2] == 0 && cnt2 == 0)
- ans ++;
- }
- if(s[i] == ')') {
- int cnt1, cnt2;
- if(i == 0) cnt1 = 1;
- else if(ul[i][2] == 1) cnt1 = l[i][1] + 1;
- else cnt1 = l[i][1] + 2;
- if(l[i][2] != 1 && ul[i][2]) continue;
- if(l[i][2] != 0 && !ul[i][2]) continue;
- if(r[i + 1][2] != 0) continue;
- if(cnt1 == r[i + 1][1])
- ans ++;
- }
- }
- cout << ans << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement