import sys
# Wczytywanie wejścia
n, s = map(int, sys.stdin.readline().split())
B = set(map(int, sys.stdin.readline().split()))
# Tworzenie zbiorów podstawowych A1, ..., An
A = [set() for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(i, n + 1, i):
A[i].add(j)
# Jeśli B już istnieje jako jeden z początkowych zbiorów
for i in range(1, n + 1):
if A[i] == B:
print(0)
sys.exit(0)
# Lista operacji
operations = []
current_index = n # Ostatni indeks zbioru
# Wybór zbiorów potrzebnych do stworzenia B
selected_sets = []
for i in range(1, n + 1):
if A[i] & B:
selected_sets.append(i)
# Budowanie zbioru B
result_set = set()
operation_map = {} # Przypisanie numeru operacji do zbioru
for i in selected_sets:
if not result_set:
result_set = A[i]
operation_map[i] = i
else:
current_index += 1
result_set |= A[i]
operations.append(f"1 {operation_map[selected_sets[0]]} {i}")
operation_map[current_index] = current_index
# Jeśli w wyniku sumowania dodaliśmy zbędne elementy, stosujemy przecięcie
if result_set != B:
complement = set(range(1, n + 1)) - result_set
if complement:
current_index += 1
operations.append(f"3 {operation_map[selected_sets[0]]}")
operation_map[current_index] = current_index
result_set = complement
# Wypisanie liczby operacji i ich listy
print(len(operations))
print("\n".join(operations))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import sys # Wczytywanie wejścia n, s = map(int, sys.stdin.readline().split()) B = set(map(int, sys.stdin.readline().split())) # Tworzenie zbiorów podstawowych A1, ..., An A = [set() for _ in range(n + 1)] for i in range(1, n + 1): for j in range(i, n + 1, i): A[i].add(j) # Jeśli B już istnieje jako jeden z początkowych zbiorów for i in range(1, n + 1): if A[i] == B: print(0) sys.exit(0) # Lista operacji operations = [] current_index = n # Ostatni indeks zbioru # Wybór zbiorów potrzebnych do stworzenia B selected_sets = [] for i in range(1, n + 1): if A[i] & B: selected_sets.append(i) # Budowanie zbioru B result_set = set() operation_map = {} # Przypisanie numeru operacji do zbioru for i in selected_sets: if not result_set: result_set = A[i] operation_map[i] = i else: current_index += 1 result_set |= A[i] operations.append(f"1 {operation_map[selected_sets[0]]} {i}") operation_map[current_index] = current_index # Jeśli w wyniku sumowania dodaliśmy zbędne elementy, stosujemy przecięcie if result_set != B: complement = set(range(1, n + 1)) - result_set if complement: current_index += 1 operations.append(f"3 {operation_map[selected_sets[0]]}") operation_map[current_index] = current_index result_set = complement # Wypisanie liczby operacji i ich listy print(len(operations)) print("\n".join(operations)) |
English