3690 - 2genc
Cerința[edit | edit source]
Se dau 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 au urmatoarea proprietate: orice element al unei soluții este mai mare sau egal cu elementul anterior sau este mai mic decât elementul anterior cu 1.
Date de intrare[edit | edit source]
Fișierul de intrare 2genc.in 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 2genc.out va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 6
- 1 ≤ m ≤ 9
Exemplu 1[edit | edit source]
- Intrare
4 3
- Iesire
1 1 1
1 1 2
1 1 3
1 1 4
1 2 1
1 2 2
1 2 3
1 2 4
1 3 2
1 3 3
1 3 4
1 4 3
1 4 4
2 1 1
2 1 2
2 1 3
2 1 4
2 2 1
2 2 2
2 2 3
2 2 4
2 3 2
2 3 3
2 3 4
2 4 3
2 4 4
3 2 1
3 2 2
3 2 3
3 2 4
3 3 2
3 3 3
3 3 4
3 4 3
3 4 4
4 3 2
4 3 3
4 3 4
4 4 3
4 4 4
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def read_input():
with open("2genc.in", "r") as file: n, m = map(int, file.readline().strip().split()) return n, m
def write_output(results):
with open("2genc.out", "w") as file: for result in results: file.write(" ".join(map(str, result)) + "\n")
def generate_sequences(n, m):
results = []
def backtrack(sequence): if len(sequence) == m: results.append(sequence[:]) return last = sequence[-1] if sequence else 0 for i in range(1, n + 1): if not sequence or i >= last or i == last - 1: sequence.append(i) backtrack(sequence) sequence.pop()
backtrack([]) return results
def main():
n, m = read_input()
# Validări if not (1 <= n <= 6): raise ValueError("n trebuie să fie între 1 și 6") if not (1 <= m <= 9): raise ValueError("m trebuie să fie între 1 și 9")
results = generate_sequences(n, m) write_output(results)
if __name__ == "__main__":
main()
</syntaxhighlight>