Cod sursa(job #1331959)

Utilizator GinguIonutGinguIonut GinguIonut Data 1 februarie 2015 14:20:01
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("emm.in");
ofstream fout("emm.out");
int n,od[100001],vp,vd,a,b,nr,i,ok;
char s[100001],ch,op[100001];
int calcul(int a, int b,int ch )
{
    if(ch=='m')
        if(a>b)
            return b;
        else
            return a;
    else
        if(a>b)
            return a;
        else
            return b;
}
int main()
{
    fin>>s+1;
    n=strlen(s+1);
    for(i=1;i<=n;i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            nr=nr*10+(s[i]-'0');
            ok=1;
        }
        else
        {
            if(ok==1)
            {
                od[++vd]=nr;
                nr=0;
                ok=0;
            }
            if(s[i]=='(')
            {
                op[++vp]=s[i];
            }
            else
                if(s[i]==')')
                {
                    while(op[vp]!='(')
                    {
                        a=od[vd];
                        b=od[--vd];
                        ch=op[--vp];
                        od[vd]=calcul(a,b,ch);
                    }
                    vp--;
                }
                else
                {
                    while(op[vp]!='('&&vp>0)
                    {
                        a=od[vd];
                        b=od[--vd];
                        ch=op[vp];
                        od[vd]=calcul(a,b,ch);
                        vp--;
                    }
                    op[++vp]=s[i];
                }

        }
    }
    if(nr!=0)
        od[++vd]=nr;
        while(vp!=0)
        {
            a=od[vd];
            b=od[--vd];
            ch=op[vp];
            vp--;
            od[vd]=calcul(a,b,ch);
        }
        fout<<od[1];
    return 0;
}