# PBinfo #874 – Atomi – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Într-o galaxie îndepărtată există doar două elemente chimice. Cercetătorii le-au numit A şi B şi toate substanțele sunt alcătuite din aceste elemente. Mai precis, o substanță este un șir  definit astfel:


A și B sunt substanțe, formate din câte un atom;
Ax și By sunt substanțe, x și y find numere naturale. Ax este formată din x atomi de tip A, iar By este formată din y atomi de tip B;
dacă S este substanță atunci (S)x este substanță, x fiind un număr natural. Dacă în S sunt p atomi, în (S)x vor fi p*x atomi;
dacă S şi T sunt substanțe atunci ST este substanță. Dacă în S sunt x atomi, iar în T sunt y atomi, în ST vor fi x+y atomi.

Pentru o substanță dată să se determine numărul atomilor de tip A  şi numărul atomilor de tip B care o compun.

Date de intrare
Programul citește de la tastatură numărul un şir de caractere reprezentând substanța dată.

Date de ieșire
Programul va afișa pe ecran două numere nA nB, separate printr-un spațiu, reprezentând numărul atomilor de tip A, respectiv numărul atomilor de tip B din substanța dată.

Restricții și precizări

șirul dat are cel mult 255 de caractere

Exemplu:
Intrare

(A3B2)2A3(B2)2
Ieșire

9 8

## Cod sursă C++

```cpp
#include <iostream>
#include <cstring>
using namespace std;
char s[256];
int A[1000] , B[1000] , n , *v;
int main()
{
	cin >> s;
	n = 1;
	for(unsigned int i = 0 ; i < strlen(s) ; i ++)
		if(s[i] == '(')
			n++,A[n] = B[n] = 0;
		else
			if(s[i] == ')')
			{
				int x = 0;
				if(s[i+1]>='0' && s[i+1] <='9')
				{
					while(s[i+1]>='0' && s[i+1] <='9')
						x = 10 * x + s[i+1] - '0', i ++;
				}
				else
					x = 1;
				A[n-1] += A[n] * x, B[n-1] += B[n] * x , n --;
			}
			else
			{
				//este A sau B
				if(s[i] == 'A')
					v = A;
				else
					v = B;
				int x = 0;
				if(s[i+1]>='0' && s[i+1] <='9')
				{
					while(s[i+1]>='0' && s[i+1] <='9')
						x = 10 * x + s[i+1] - '0', i ++;
				}
				else
					x = 1;
				v[n] += x;
			}
	cout << A[1] << " " << B[1];
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/874)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/874/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-874/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
