Pagini recente » Cod sursa (job #2147316) | Cod sursa (job #1136078) | Cod sursa (job #2334120) | Cod sursa (job #333598) | Cod sursa (job #2740317)
#include <iostream>
#include <algorithm>
#include <stack>
#include <cstring>
#include <cctype>
using namespace std;
long long atomi_total_A, atomi_total_B;
char c[260];
// tre sa fac pt mai multe paranteze de odata
int cifra(char c) {
if (0 <= c - '0' && c - '0' <= 9)
return c - '0';
return -1;
}
pair<long long, long long> calculator(char c[], long long n) {
long long atomi_A = 0, atomi_B = 0, nr_curent = 0, atom = 1; // nr_curent e valoarea curenta, daca atom e 1 atunci trebuie sa-i dau lui A, daca e 2 ii dau lui B
int i;
for (i = 0; i < n; i++) {
// mereu c[i] e A, B, un numar, sau paranteza
if (c[i] == 'A')
atom = 1;
if (c[i] == 'B')
atom = 2;
if (cifra(c[i]) > -1) {
while (i < n && cifra(c[i]) > -1) {
nr_curent = nr_curent * 10 + cifra(c[i]);
i++;
}
i--;
if (atom == 1) {
atomi_A += nr_curent;
nr_curent = 0;
}
else {
atomi_B += nr_curent;
nr_curent = 0;
}
}
if (c[i] == '(') { // eu practic vreau sa bag tot ce e in paranteza iar in toata functia asta, pana dau de ceva fara paranteze
int paranteza = 0; // daca am mai multe paranteze in acelasi timp
int indice = i; // sa stiu unde a inceput totul
char aux[256];
int indice_temp = 0; // indice pentru aux
while ((i < n && c[i] != ')') || paranteza != 1) {
if (c[i] == '(')
paranteza++;
if (c[i] == ')')
paranteza--;
i++;
}
for (int j = indice + 1; j < i; j++) { // copiez in aux ce e long longre paranteze
aux[indice_temp] = c[j];
indice_temp++;
}
//strlen e indice_temp ( gen i<indice_temp)
i++;
long long valoare_temp = 0; // valoarea dupa paranteze
while (i < n && cifra(c[i])> -1) {
valoare_temp = valoare_temp * 10 + cifra(c[i]);
i++;
}
i--;
pair<long long, long long> temporar = calculator(aux, indice_temp);
atomi_A += temporar.first * valoare_temp;
atomi_B += temporar.second * valoare_temp;
}
}
pair<long long, long long> temp; // fac cu pereche si .first e nr de atomi A, .second e nr de atomi B
temp.first = atomi_A; temp.second = atomi_B;
return temp;
}
int main() {
cin.getline(c, 256);
long long n = strlen(c);
pair <long long, long long > temp = calculator(c, n);
cout << temp.first << " " << temp.second;
}