# PBinfo #1031 – Culori2 – Rezolvare C++

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

## Enunț

Pasiunea Mirunei este să coloreze. Vacanţa trecută şi-a petrecut-o la bunica ei la ţară şi pentru că se cam plictisea s-a gândit să vopsească gardul de la casa bunicii.


Gardul este compus din N scânduri dispuse una lângă alta. Miruna a găsit în garajul bunicii 5 cutii de vopsea de culori diferite: albă, albastră, roşie, verde şi galbenă. Când a vopsit gardul, Miruna a respectat următoarele reguli:

Dacă o scândură era vopsită cu alb, următoarea scândură o vopsea obligatoriu cu albastru
Dacă o scândură era vopsită cu albastru, atunci următoarea scândură o vopsea cu  alb sau roşu
Dacă o scândură era vopsită cu roşu, atunci următoarea scândură o vopsea cu  albastru sau verde
Dacă o scândură era vopsită cu verde, atunci următoarea scândură o vopsea cu roșu sau galben
Dacă o scândură era vopsită cu galben, atunci următoarea scândură o vopsea obligatoriu cu verde

După ce a și-a terminat treaba Miruna își admira “opera de artă” și se întreba în câte moduri diferite ar fi putut să vopsească gardul bunicii. 

Cerința
Ajutați-o pe Miruna să găsească răspunsul la întrebarea sa.

Date de intrare
Fișierul de intrare culori2.in conține pe prima sa linie un singur număr natural N (1 ≤ N ≤ 5000).

Date de ieșire
Fișierul de ieșire culori2.out va conţine pe prima sa linie un singur număr întreg reprezentând numărul de moduri diferite în care Miruna ar fi putut să vopsească gardul bunicii.

Restricții și precizări

1 ≤ N ≤ 5000
Pentru 25% dintre teste N≤45.

Exemplu:
culori2.in

4
culori2.out

24
Explicație
Gardul poate fi vopsit astfel:
(alb,albastru,alb,albastru); (alb,albastru,rosu,albastru);
(alb,albastru,rosu,verde); (albastru,alb,albastru,alb);
(albastru,alb,albastru,rosu); (albastru,rosu,albastru,alb);
(albastru,rosu,albastru,rosu); (albastru,rosu,verde,rosu);
(albastru,rosu,verde,galben); (rosu,albastru,alb,albastru);
(rosu,albastru,rosu,albastru); (rosu,albastru,rosu,verde);
(rosu,verde,rosu,albastru); (rosu,verde,rosu,verde);
(rosu,verde,galben,verde); (verde,rosu,albastru,alb);
(verde,rosu,albastru,rosu); (verde,rosu,verde,rosu);
(verde,rosu,verde,galben); (verde,galben,verde,rosu);
(verde,galben,verde,galben); (galben,verde,rosu,albastru);
(galben,verde,rosu,verde); (galben,verde,galben,verde).

## Cod sursă C++

```cpp
// prof. Carmen Popescu - Col. Nat. Gh. Lazar Sibiu
#include <fstream>
using namespace std;
ifstream f("culori2.in");
ofstream g("culori2.out");
int n;
string s;
void s_la_p(int p)
{
	string::iterator it;
	string::reverse_iterator rit;
	int i,t,c;
	for (i=1;i<=p;i++)
	{
		t=0;
		for ( it=s.begin() ; it<s.end(); it++)
		{	
			c=(*it)-'0';
			c=c*3+t;
			t=c/10;
			c=c%10;
			(*it)=c+'0';
		}
		if (t>0)
			s += t+'0';
	}
	for ( rit=s.rbegin(); rit<s.rend(); rit++)
		g<<(*rit);
	g<<"\n";
}
int main()
{
	int k;
	f>>n;
	if (n==1)
		g<<"5\n";
	else
		if (n==2)
			g<<"8\n";
		else
			if (n==3)
				g<<"14\n";
			else
			{
				if (n%2==0)
					s="8";
				else
					s="41";
				k=n/2;
				s_la_p(k-1);
			}
}
```

## Resurse

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