Pagini recente » Cod sursa (job #1821012) | Cod sursa (job #914171) | Cod sursa (job #1949899) | Cod sursa (job #507241) | Cod sursa (job #561771)
Cod sursa(job #561771)
#include <fstream>
using namespace std;
char s[100005];
int numere=0;
int rotunde(int &x);
int patrate(int &x)
{ int v[100005];
int j=0, i, nr=0, sem;
x++;
while(s[x]!=']')
{ if(s[x]=='[')
{ nr=patrate(x);
v[j]=nr; j++; nr=0;}
if(s[x]=='(')
{ nr=rotunde(x);
v[j]=nr; j++; nr=0; }
if(s[x]=='-')
{ sem=1; x++;}
while(s[x]>='0'&&s[x]<='9')
{ nr=nr*10+s[x]-'0';
x++; }
if(sem==1)
{ nr=nr*(-1); sem=0; }
if(nr!=0)
{ v[j]=nr; j++; nr=0; x--; numere++;}
x++; }
for(int a=0; a<j-1; a++)
for(int b=a+1; b<j; b++)
if(v[a]<v[b])
{ int aux=v[a]; v[a]=v[b]; v[b]=aux; }
return v[j/2]; }
int rotunde(int &x)
{ int v[100005];
int j=0, i, nr=0, sem;
int aux=0, suma=0;
x++;
while(s[x]!=')')
{
if(s[x]=='[')
{ nr=patrate(x);
v[j]=nr; j++;nr=0;}
if(s[x]=='(')
{ nr=rotunde(x);
v[j]=nr; j++; nr=0; }
if(s[x]=='-')
{ sem=1; x++;}
while(s[x]>='0'&&s[x]<='9')
{ nr=nr*10+s[x]-'0';
x++; }
if(sem==1)
{ nr=nr*(-1); sem=0; }
if(nr!=0)
{ v[j]=nr; j++; nr=0; x--; numere++;}
x++; }
for(int a=1; a<j; a++)
{ aux=v[a];
for(int b=a-1; b>=0; b--)
{ aux=aux+v[b];
if(aux>suma)
suma=aux; }
}
return suma;
}
int main()
{ int i, n, x;
ifstream f("expresie.in");
ofstream g("expresie.out");
f.getline(s, 100005);
int nr=0, suma=0, sem=0;
for(i=0; i<strlen(s); i++)
{ if(s[i]=='-')
sem=1;
while(s[i]>='0'&&s[i]<='9')
{ nr=nr*10+s[i]-'0'; i++; }
if(sem==1)
{ nr=nr*(-1); sem=0; suma=suma+nr; nr=0; }
if(nr!=0)
{ suma=suma+nr; numere++; }
if(s[i]=='(')
{ nr=rotunde(i);
suma=suma+nr;}
if(s[i]=='[')
{ nr=patrate(i);
suma=suma+nr; }
nr=0;
}g<<numere<<'\n';
g<<suma;
return 0;
}