# PBinfo #969 – Culori1 – Rezolvare C++

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

## Enunț

Într-o cameră sunt aşezate n*m acvarii identice, pe n rânduri, câte m pe fiecare rând, unul lângă altul. În fiecare acvariu se află un singur peşte. Peştele poate fi de culoare roşie (culoare codificată cu r) sau albastră (codificată cu a). La fiecare moment de timp t=1,2,3,.., peştii îşi modifică simultan culoarea astfel: fiecare peşte se colorează în culoarea pe care au avut-o la momentul t-1 majoritatea peştilor din acvariile învecinate (ca în desenul de mai jos, sunt cel mult  8 acvarii vecine notate cu V1, V2, V3,…, V8). În cazul în care numărul peştilor vecini roşii este egal cu numărul peştilor vecini albaştrii, peştele studiat îşi va păstra culoarea. 



Cerinţa
Scrieţi un program care să citească numerele naturale n, m, t şi cele n*m coduri ale culorilor peştilor (cele de la momentul iniţial t=0) şi care să determine şi să afişeze codurile culorilor peştilor de la momentul t.

Date de intrare
Fișierul de intrare culori1.in conține


pe prima linie numerele naturale n, m şi t, separate printr-un singur spaţiu, cu semnificaţia din enunț
pe următoarele n linii se află câte m caractere r sau a, pentru fiecare rând de acvarii, format astfel:
	
dacă peştele din acvariul cu numărul de ordine i (1≤i≤m) din rândul curent este roşu, atunci cel de-al i-lea caracter din linia fişierului de intrare, corespunzătoare rândului curent, este r
dacă peştele din acvariul cu numărul de ordine i (1≤i≤m) din rândul curent este albastru atunci cel de-al i-lea caracter din linia fişierului de intrare, corespunzătoare rândului curent, este a


Date de ieșire
Fișierul de ieșire culori1.out va conține n linii, fiecare linie va conţine câte m caractere r sau  a, reprezentând codurile culorilor peştilor din rândul corespunzător numărului liniei curente din fişier.

Restricții și precizări

2 ≤ n < 50, 2 ≤ m < 50,
1 ≤ t ≤ 2300000
Se garantează că există soluție pentru toate datele de test.

Exemplu 1
culori1.in

3 3 1      
rar
rra   
arr
culori1.out

rra
rrr
rrr
Exemplu 2
culori1.in

4 5 3
rrara
aarra
aarrr
rrraa
culori1.out

aarrr
aarrr
rrrrr
rrrrr

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
char a[50][50], b[50][50];
int main()
{
	int n , m , i , j , s , v , x = 1;
	long t , k;
	ifstream f("culori1.in");
	ofstream g("culori1.out");
	f >> n >> m  >> t;
	for(i = 1 ; i <= n ; i++)
		for(j = 1 ; j <= m ; j++)
			f >> a[i][j];
	for(k = 1; k<=t && x ; k++)
	{
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
			{
				s=0;v=0; b[i][j]=a[i][j];
				if(j>1)
					if (a[i][j-1]=='a')
						s++;
					else 
						v++;
				if(j<m)
					if (a[i][j+1]=='a')
						s++;
					else
						v++;
				if(i>1)
					if (a[i-1][j]=='a')
						s++;
					else
						v++;
				if(i<n)
					if (a[i+1][j]=='a')
						s++;
					else
						v++;
				if(i>1 && j>1)
					if (a[i-1][j-1]=='a')
						s++;
					else
						v++;
				if(i>1 && j<m)
					if (a[i-1][j+1]=='a')
						s++;
					else
						v++;
				if(i<n && j>1)
					if (a[i+1][j-1]=='a')
						s++;
					else
						v++;
				if(i<n && j<m)
					if (a[i+1][j+1]=='a')
						s++;
					else
						v++;
				if (s<v)
					b[i][j]='r';
				else
					if(s>v)
						b[i][j]='a';
			}
		x=0;
		for(i = 1 ; i <=n && !x ; i++)
			for(j = 1 ; j <= m ; j++)
				if(a[i][j] != b[i][j]) 
				{
					x=1;
					break;
				}
		if(x)
			for(i=1;i<=n;i++)
				for(j=1;j<=m;j++)
					a[i][j]=b[i][j];
		else 
			break;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			g<<a[i][j];
		g<<endl;   
	}
	f.close();
	g.close();
	return 0;
  }
```

## Resurse

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