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)) |