Pagini recente » Cod sursa (job #324384) | Cod sursa (job #1688188) | Cod sursa (job #3264541) | Cod sursa (job #1920576) | Cod sursa (job #2791001)
#include <stdio.h>
#include <stdlib.h>
#define LMAX 100000
int s[LMAX],si,v[LMAX/2];
int nrf;
void kelement(int begin, int end){
int b = begin, e = end, pivot = v[(begin + end)/2], aux;
while(v[b] < pivot)
b++;
while(v[e] > pivot)
e--;
while(b<e){
aux = v[b];
v[b] = v[e];
v[e] = aux;
do{
b++;
} while(v[b] < pivot);
do{
e--;
} while(v[e] > pivot);
}
if(begin < e)
kelement (begin, e);
if(e + 1 < end)
kelement (e + 1, end);
}
int secvmax();
int mediana();
int factor(){
int semn = 1,r = 0;
if(s[si] == '-'){
semn = -1;
si++;
}
if(s[si] == '('){
si ++;
r = secvmax();
} else if(s[si] == '['){
si ++;
r = mediana();
} else{
nrf ++;
while(s[si] >= '0' && s[si] <= '9'){
r*=10;
r+=s[si] - '0';
si++;
}
if(s[si] == ',')
si++;
}
return r * semn;
}
int secvmax(){
int t,sum,smax;
smax = 0;
sum = 0;
while(s[si] != ')'){
t = factor();
if(sum < 0)
sum = t;
else
sum += t;
if(sum > smax)
smax = sum;
}
si ++;
return smax;
}
int mediana(){
int i,k;
i=0;
while(s[si] != ']'){
v[i] = factor();
i++;
}
si++;
k = (i+1)/2;
// for(int j=0;j<i;j++)
// printf("%d ",v[j]);
// printf("\n");
kelement(0,i-1);
// for(int j=0;j<i;j++)
// printf("%d ",v[j]);
// printf("\n");
return v[k-1];
}
int adunare(){
int sum,r;
sum = 0;
while(s[si] != '\n'){
r = factor();
sum += r;
}
return sum;
}
int main(){
FILE *fin, *fout;
nrf = 0;
fin = fopen("expresie2.in","r");
si = 0;
s[si] = fgetc(fin);
while(s[si] != '\n'){
si++;
s[si] = fgetc(fin);
}
si = 0;
fclose(fin);
fout = fopen("expresie2.out","w");
fprintf(fout,"%d\n%d\n",nrf,adunare());
fclose(fout);
return 0;
}