3920 - CainiSiPisici1

De la Universitas MediaWiki

Cerința

Într-o curte sunt c câini și p pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:

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

Date de intrare

Programul citește de la tastatură numerele c p.

Date de ieșire

Programul va afișa pe rânduri separate ale ecranului șiruri formate din c caractere 'C' (câine) și p caractere 'P' (pisică), conform enunțului.

Restricții și precizări

  • 1 ⩽ c , p ⩽ 10

Exemplul 1

Intrare
3 3
Ieșire
CCCPPP
CCPPCP
CPPCCP

Exemplul 2

Intrare
0 0
Ieșire
Datele nu corespund restrictiilor impuse.

Rezolvare

#3920 - CainiSiPisici1
def Afisare(L, x):
    for i in range(1, L + 1):
        print(A[x[i]], end='')
    print()

def RestrictionCheck(c, p):
    if not (1 <= c <= 10) or not (1 <= p <= 10):
        print("Datele nu corespund restrictiilor impuse")
        return False
    return True

def OK(k, x, c, p):
    if k == 1 and x[k] != 0:
        return False
    if k == n and x[k] != 1:
        return False
    if c < 0 or p < 0:
        return False
    if k > 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:
        return False
    return True

def Back(k, x, c, p):
    for i in range(2):
        x[k] = i
        if i == 0:
            c -= 1
        else:
            p -= 1
        if OK(k, x, c, p):
            if k == n:
                Afisare(n, x)
            else:
                Back(k + 1, x, c, p)
        if i == 0:
            c += 1
        else:
            p += 1

if __name__ == "__main__":
    A = ['C', 'P']
    c, p = map(int, input().split())

    if RestrictionCheck(c, p):
        n = c + p
        x = [0] * 21
        Back(1, x, c, p)