Pagini recente » Cod sursa (job #383215) | Cod sursa (job #875033) | Cod sursa (job #2008250) | Cod sursa (job #2441862) | Cod sursa (job #2740111)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
#include <cstring>
#include <cctype>
using namespace std;
ifstream in("test.in");
ofstream out("test.out");
int atomi_total_A, atomi_total_B;
char c[260];
// tre sa fac pt mai multe paranteze de odata
pair<int, int> calculator(char c[], int n) {
int i, 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
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 (isdigit(c[i])) {
while (i < n && isdigit(c[i])) {
nr_curent = nr_curent * 10 + (c[i] - '0');
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 intre paranteze
aux[indice_temp] = c[j];
indice_temp++;
}
//strlen e indice_temp ( gen i<indice_temp)
i++;
int valoare_temp = 0; // valoarea dupa paranteze
while (i < n && isdigit(c[i])) {
valoare_temp = valoare_temp * 10 + (c[i] - '0');
i++;
}
i--;
pair<int, int> temporar = calculator(aux, indice_temp);
atomi_A += temporar.first * valoare_temp;
atomi_B += temporar.second * valoare_temp;
}
}
pair<int, int> 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() {
in.getline(c, 256);
int n = strlen(c);
pair <int, int > temp = calculator(c, n);
cout << temp.first << " " << temp.second;
}