int main() { while(getline(cin, line)) { istringstream parsing(line); STACK matrioshkas; SETFALSE(flag1); SETTRUE(flag2); while(parsing >> m && flag2) { SETTRUE(flag1); if(m < 0) { m = labs(m); if(!matrioshkas.empty()) { (matrioshkas.top().second <= m) ? SETFALSE(flag2) : matrioshkas.top().second -= m; } PUSH(matrioshkas, make_pair(m, m)); } else { if(matrioshkas.empty() || matrioshkas.top().first != m) SETFALSE(flag2); else POP(matrioshkas); } } if(!flag1 || !matrioshkas.empty()) SETFALSE(flag2); cout << ((flag2) ? ":-) Matrioshka!\n" : ":-( Try again.\n"); } return 0; }
void emptyStacks(VVI &inp,STACK &sti,STACK &stj,int &val){ while(!sti.empty()){ int i = sti.top(); sti.pop(); int j = stj.top(); stj.pop(); if(inp[i][j]<val){ inp[i][j] = val; } } val = 0; }