3920 - CainiSiPisici1

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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)