Cod sursa(job #2061258)

Utilizator xRoALexBirtoiu Alexandru xRoALex Data 9 noiembrie 2017 00:38:09
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.05 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;

ifstream f("expresie2.in");
ofstream g("expresie2.out");

string s;
int i,ct;
int patrata();
int getNr();

int rotunda()
{
    int suma=0,maxim=INT_MIN;
    i++;
    while(s[i]!=')')
    {
        int x=0,intrat=0;
        if(s[i]=='(')
            {
                x=rotunda();
                intrat=1;
            }
        else if(s[i]=='[')
            {
                x=patrata();
                intrat=1;
            }
        else if(s[i]=='-'||(s[i]>='0'&&s[i]<='9'))
            {
                x=getNr();
                intrat=1;
            }
        if(intrat)
       {
        suma+=x;
        maxim=max(suma,maxim);
        if(suma<0)
            suma=0;
       }
        i++;
    }
    return maxim;
}

int patrata()
{
    vector <int> mij;
     i++;
     mij.push_back(0);
    while(s[i]!=']')
    {
        int x=0;
        if(s[i]=='(')
           {
                x=rotunda();
                mij.push_back(x);
            }
        else if(s[i]=='[')
            {
                x=patrata();
                mij.push_back(x);
            }
        else if(s[i]=='-'||(s[i]>='0'&&s[i]<='9'))
            {
                x=getNr();
                mij.push_back(x);
            }
        i++;
    }
    sort(mij.begin(),mij.end());
    return mij[mij.size()/2];
}

int getNr()
{
    ct++;
    int m=0,nr=0;
    if(s[i]=='-')
        {
            m=1;
            i++;
        }
    while(s[i]>='0'&&s[i]<='9')
    {
        nr=nr*10+s[i]-'0';
        i++;
    }
    i--;
    if(m==1)
        nr=-nr;
    return nr;
}

int main()
{
    int suma=0;
    f>>s;
    while(i<s.size())
    {
        int x=0;
        if(s[i]=='(')
            x=rotunda();
        else if(s[i]=='[')
            x=patrata();
        else if(s[i]=='-'||(s[i]>='0'&&s[i]<='9'))
            x=getNr();
        suma+=x;
        i++;
    }
    g<<ct<<'\n'<<suma;
    return 0;
}