The + is at position 1
The (* is position 2
The o is position 3
Tricky cases:
Input:
(*(*)) ((*) ([)] ([ ])()(**) *) [ (Output:
NO 3 NO 3 NO 3 YES NO 1 NO 2 NO 10
/* --------------------------> BISMILLAHIR RAHMANIR RAHIM <------------------------------ */ /* ------------------------> Tafhim Ul Islam [ CSE-09@IIUC ] <--------------------------- */ #include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <string> #include <map> #include <stack> #include <queue> #include <cstdlib> #include <vector> #include <climits> #define MI INT_MAX #define ULONG unsigned long long #define LLONG long long #define swap(a,b) {int t=a ; a=b ; b=t; } #define sz(a) sizeof(a) #define FOR(i, a, b) for (i=a ; i<b ; i++) #define QSORT(a,n,s,f) qsort(a,n,sizeof(s),f) using namespace std; char inp[4000]; class symbol { public: int c, p; }; int main() { int i, j, prb, length; bool valid; symbol temp, push; while (gets(inp)) { length = strlen(inp); stack<symbol> s; prb=-1; for (i=0, j=0, valid=true ; i<length ; i++, j++) { //cout << s.size() << endl; //cout << inp[i] << " [] " << endl; if (inp[i]=='(') { if (i<length-1 && inp[i+1]=='*') { s.push({1,j+1}); i++; } else { s.push({2,j+1}); } } else if (inp[i]=='[') { s.push({3,j+1}); } else if (inp[i]=='{') { s.push({4,j+1}); } else if (inp[i]=='<') { s.push({5,j+1}); } else if (inp[i]=='*') { if (i<length-1 && inp[i+1]==')') { i++; if (s.empty()) { prb = j+1; valid = false; break; } else { temp = s.top(); s.pop(); if (temp.c!=1) { prb = j+1; valid = false; break; } } } } else if (inp[i]==')') { if (s.empty()) { prb = j+1; valid = false; break; } else { temp = s.top(); s.pop(); if (temp.c!=2) { prb = j+1; valid = false; break; } } } else if (inp[i]==']') { if (s.empty()) { prb = j+1; valid = false; break; } else { temp = s.top(); s.pop(); if (temp.c!=3) { prb = j+1; valid = false; break; } } } else if (inp[i]=='}') { if (s.empty()) { prb = j+1; valid = false; break; } else { temp = s.top(); s.pop(); if (temp.c!=4) { prb = j+1; valid = false; break; } } } else if (inp[i]=='>') { if (s.empty()) { prb = j+1; valid = false; break; } else { temp = s.top(); s.pop(); if (temp.c!=5) { prb = j+1; valid = false; break; } } } else { prb = -1; } } //printf("%d\n",i); if (s.empty() && valid && i>=length) { printf("YES\n"); } else { if (!s.empty() && i>=length) printf("NO %d\n",j+1); else if (prb<0) printf("NO %d\n",s.top().p); else printf("NO %d\n",prb); } } }
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.