3919 - Back ME
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 E
și m
litere M
cu proprietatea că nu există mai mult de două litere M
alăturate și nici mai mult de două litere E
alăturate.
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 ≤ 17
,0 ≤ m ≤ 17
0 ≤ n + m ≤ 28
- Dacă nu există cuvinte care să respecte condițiile, atunci se va afișa
IMPOSIBIL
.
Exemplul 1:[edit | edit source]
Intrare
3 3
Ieșire
EEMEMM EEMMEM EMEEMM EMEMEM EMEMME EMMEEM EMMEME MEEMEM MEEMME MEMEEM MEMEME MEMMEE MMEEME MMEMEE
Exemplul 2:[edit | edit source]
Intrare
18 29
Ieșire
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def afisare(v, st, e, m):
for i in range(1, e + m + 1): print(v[st[i]], end=) print()
def valid(v, st, k, e, m):
for i in range(1, k - 1): if v[st[i]] == 'E' and v[st[i + 1]] == 'E' and v[st[i + 2]] == 'E': return False if v[st[i]] == 'M' and v[st[i + 1]] == 'M' and v[st[i + 2]] == 'M': return False if k == e + m: E, M = 0, 0 for i in range(1, k + 1): if v[st[i]] == 'E': E += 1 else: M += 1 if E != e or M != m: return False return True
def bck(v, st, k, e, m, g):
for i in range(2): st[k] = i if valid(v, st, k, e, m): if k == e + m: g[0] = 1 afisare(v, st, e, m) else: bck(v, st, k + 1, e, m, g)
def check_restrictions(n, m):
if 0 <= n <= 17 and 0 <= m <= 17 and 0 <= n + m <= 28: return True else: print("Datele nu corespund restrictiilor impuse") return False
def main():
e, m = map(int, input().split()) if not check_restrictions(e, m): return v = [] * 109 st = [0] * 109 g = [0] v[0], v[1] = 'E', 'M' bck(v, st, 1, e, m, g) if g[0] == 0: print("IMPOSIBIL")
if __name__ == "__main__":
main()
</syntaxhighlight>