3918 - Back Cp

From Bitnami MediaWiki
Revision as of 11:07, 7 January 2024 by Rus Marius (talk | contribs) (Pagină nouă: = Cerința = Se citesc două numere naturale <code>n</code> și <code>m</code>. Afișați în ordine lexicografică toate cuvintele care sunt formate din <code>n</code> litere <code>C</code> și <code>m</code> litere <code>P</code> cu proprietatea că nu există nicio literă <code>P</code> cuprinsă între două litere <code>C</code>. = Date de intrare = Programul citește de la tastatură numerele <code>n</code> și <code>m</code>, separate prin spații. = Date de ieșire...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Se citesc două numere naturale n și m. Afișați în ordine lexicografică toate cuvintele care sunt formate din n litere C și m litere P cu proprietatea că nu există nicio literă P cuprinsă între două litere C.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n și m, separate prin spații.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe linii separate cuvintele cerute.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse".

Restricții și precizări[edit | edit source]

  • 0 ≤ n ≤ 13, 0 ≤ m ≤ 13

Exemplul 1:[edit | edit source]

Intrare

3 2

Ieșire

CCCPP
CCPPC
CPPCC
PCCCP
PPCCC

Exemplul 2:[edit | edit source]

Intrare

14 14

Ieșire

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def check_restrictions(n, m):

   if 0 <= n <= 13 and 0 <= m <= 13:
       return True
   else:
       print("Datele nu corespund restrictiilor impuse")
       return False

def afisare(X, n, m):

   result = ""
   for i in range(1, n + m + 1):
       if X[i] == 0:
           result += 'C'
       else:
           result += 'P'
   print(result)

def ok(X, k, n, m):

   s = sum(X[1:k+1])
   if s > m or k - s > n:
       return False
   if k > 2 and X[k-2] == 0 and X[k-1] == 1 and X[k] == 0:
       return False
   return True

def back(X, k, n, m):

   for i in range(2):
       X[k] = i
       if ok(X, k, n, m):
           if k == n + m:
               afisare(X, n, m)
           else:
               back(X, k + 1, n, m)

def main():

   n, m = map(int, input().split())
   if not check_restrictions(n, m):
       return
   X = [0] * (n + m + 1)
   back(X, 1, n, m)

if __name__ == "__main__":

   main()

</syntaxhighlight>