Pagini recente » Cod sursa (job #1207205) | Cod sursa (job #2360628) | Cod sursa (job #286265) | Cod sursa (job #1155424) | Cod sursa (job #2061258)
#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;
}