3689 - 2gen
Cerința[edit | edit source]
Se n
și m
numere naturale. Afișați în ordine lexicografică toate șirurile de lungime m
care conțin numere de la 1
la n
și fiecare valoare apare de maxim două ori.
Date de intrare[edit | edit source]
Fișierul de intrare 2genIN.txt
conține pe prima linie numerele n
și m
separate prin spațiu.
Date de ieșire[edit | edit source]
Fișierul de ieșire 2genOUT.txt
va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor".
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 6
1 ≤ m ≤ 6
Exemplul 1[edit | edit source]
2genIN.txt
4 3
2genOUT.txt
1 1 2 1 1 3 1 1 4 1 2 1 1 2 2 1 2 3 1 2 4 1 3 1 1 3 2 1 3 3 1 3 4 1 4 1 1 4 2 1 4 3 1 4 4 2 1 1 2 1 2 2 1 3 2 1 4 2 2 1 2 2 3 2 2 4 2 3 1 2 3 2 2 3 3 2 3 4 2 4 1 2 4 2 2 4 3 2 4 4 3 1 1 3 1 2 3 1 3 3 1 4 3 2 1 3 2 2 3 2 3 3 2 4 3 3 1 3 3 2 3 3 4 3 4 1 3 4 2 3 4 3 3 4 4 4 1 1 4 1 2 4 1 3 4 1 4 4 2 1 4 2 2 4 2 3 4 2 4 4 3 1 4 3 2 4 3 3 4 3 4 4 4 1 4 4 2 4 4 3
Exemplul 2[edit | edit source]
2genIN.txt
7 7
consola
Nu corespunde restricțiilor
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def genereaza_siruri(n, m):
def backtracking(sir_partial): if len(sir_partial) == m: solutii.append(sir_partial.copy()) return
for numar in range(1, n + 1): if folosit[numar] < 2: sir_partial.append(numar) folosit[numar] += 1
backtracking(sir_partial)
sir_partial.pop() folosit[numar] -= 1
solutii = [] folosit = {numar: 0 for numar in range(1, n + 1)} backtracking([])
return solutii
def main():
# Citire date de intrare with open("2genIN.txt", "r") as fisier_intrare: n, m = map(int, fisier_intrare.readline().split())
# Verificare restricții if not (1 <= n <= 6 and 1 <= m <= 6): print("Nu corespunde restricțiilor") return
# Generare șiruri siruri = genereaza_siruri(n, m)
# Scriere rezultate în fișierul de ieșire with open("2genOUT.txt", "w") as fisier_iesire: if siruri: for sir in siruri: fisier_iesire.write(" ".join(map(str, sir)) + "\n") else: fisier_iesire.write("Nu corespunde restricțiilor\n")
if __name__ == "__main__":
main()
</syntaxhighlight>