Pagini recente » Cod sursa (job #2515437) | Cod sursa (job #1349157) | Cod sursa (job #2224323) | Cod sursa (job #371978) | Cod sursa (job #1825959)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <climits>
using namespace std;
int ret,ret1,len;
char s[100005];
inline int numar(int &i)
{
int nr = 0,inm = 1;
++ret1;
if (s[i]=='-')
inm = -1,
++i;
for ( ; i<=len&&isdigit(s[i]); ++i,nr*=10)
nr+=s[i]-'0';
nr /= 10;
return nr*inm;
}
inline int solve(int &i,int paran)
{
int chr;
if (paran == 1)
{
int smax = -INT_MAX,nrmax = -INT_MAX,sum=0;
++i;
while (s[i]!=')')
{
int local;
if(isdigit(s[i])||s[i]=='-')
local = numar(i);
else if (s[i]==',')
{
++i;
continue;
}
else if (s[i]=='(')
local = solve(i,1);
else if (s[i]=='[')local = solve(i,2);
if (local>nrmax)nrmax = local;
sum += local;
smax = max(sum,smax);
if (sum<0)
sum = 0;
}
++i;
return max(smax,nrmax);
}
else
{
vector <int> v;
int in = 0;
v.push_back(INT_MIN+3);
++i;
while(s[i]!=']')
{
int local ;
if(isdigit(s[i])||s[i]=='-')
local = numar(i),++in;
else if (s[i]==',')
{
++i;
continue;
}
else if (s[i]=='(')
local = solve(i,1),++in;
else if (s[i]=='[')local = solve(i,2),++in;
v.push_back(local);
}
sort(v.begin(),v.end());
int lenn = v.size();
++i;
return v[(in+1)/2];
}
}
int main()
{
freopen("expresie2.in","r",stdin);
freopen("expresie2.out","w",stdout);
gets(s+1);
int i = 1;
len = strlen(s+1);
while(i <= len)
{
if(isdigit(s[i])||s[i]=='-')
ret += numar(i);
else if (s[i]==',')
++i;
else if (s[i]=='(')
ret += solve(i,1);
else ret += solve(i,2);
}
printf("%d\n%d", ret1 , ret);
return 0;
}