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;
}
示例#2
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;
}