Cod sursa(job #561771)

Utilizator Copilu_DementCosta Marius Costin Copilu_Dement Data 21 martie 2011 17:16:33
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#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;
}