# PBinfo #3921 – CainiSiPisici2 – Rezolvare C++

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

## Enunț

Cerința
Într-o curte se află câini și pisici. Să se genereze în ordine lexicografică șirurile formate din n animale, care :


încep cu câine și se termină cu pisică;
conțin cel mult m pisici;
nu conțin nicio pisică între doi câini.

Date de intrare
Programul citește de la tastatură numerele n m.

Date de ieșire
Programul va afișa pe rânduri separate ale ecranului șiruri formate din n caractere: 'C' (câine) sau 'P' (pisică), conform enunțului. 

Restricții și precizări

1 ≤ m ≤ n ≤ 20

Exemplu:
Intrare

 6 3
Ieșire

CCCCCP
CCCCPP
CCCPPP
CCPPCP
CPPCCP

## Cod sursă C++

```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char A[3]="CP";
int x[21] , n , m;
void Afisare(int L)
{
    for(int i = 1 ; i <= L ; i ++)
        cout << A[x[i]];
    cout << '\n';
}
bool OK(int k)
{
	if(k == 1)
		if(x[k] != 0)
			return false;
	if(k == n)
		if(x[k] != 1)
			return false;
	if(m < 0)
		return false;
	if(k > 2)
		if(x[k] == 0 && x[k-1] == 1 && x[k-2] == 0)
			return false;
    return true;
}
void Back(int k)
{
	for(int i = 0 ; i <= 1 ; i ++)
	{
		x[k] = i;
		if(i == 1)
			m --;
		if(OK(k))
		{
			if(k == n)
				Afisare(n);
			else
				Back(k + 1);
		}
		if(i == 1)
			m ++;
	}
}
int main()
{
    cin >> n >> m;
    Back(1);
    return 0;
}
```

## Resurse

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