├── .gitignore ├── home_work_1 ├── A_conditioner │ ├── output.txt │ ├── input.txt │ ├── main.py │ └── readme.md ├── B_triangle │ ├── output.txt │ ├── input.txt │ ├── main.py │ └── readme.md ├── C_numbers │ ├── output.txt │ ├── input.txt │ ├── main.py │ └── readme.md ├── H_metro │ ├── main.py │ └── readme.md ├── D_UrKorn │ ├── main.py │ └── readme.md ├── G_det │ ├── main.py │ └── readme.md ├── I_uznoc │ ├── main.py │ └── readme.md ├── F_comp │ ├── main.py │ └── readme.md ├── J_SLU │ └── main.py └── E_umbalance │ ├── readme.md │ └── main.py ├── sample_contest └── 00 │ ├── main.py │ └── readme.md ├── home_work_3 ├── A_diferent_num │ ├── main.py │ └── readme.md └── B_two_arr │ └── main.py ├── home_work_2 ├── D_neighbors │ ├── main.py │ └── readme.md ├── A_sortist │ ├── main.py │ └── readme.md ├── C_number │ ├── main.py │ └── readme.md ├── H_proizv3 │ ├── readme.md │ └── main.py ├── G_proizv │ ├── main.py │ └── readme.md ├── F_simm │ ├── main.py │ └── readme.md ├── B_posl │ ├── readme.md │ └── main.py ├── E_chemp │ ├── main.py │ └── readme.md └── I_saper │ └── main.py └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | .idea -------------------------------------------------------------------------------- /home_work_1/A_conditioner/output.txt: -------------------------------------------------------------------------------- 1 | 20 -------------------------------------------------------------------------------- /home_work_1/B_triangle/output.txt: -------------------------------------------------------------------------------- 1 | YES -------------------------------------------------------------------------------- /home_work_1/B_triangle/input.txt: -------------------------------------------------------------------------------- 1 | 3 2 | 4 3 | 5 4 | -------------------------------------------------------------------------------- /home_work_1/A_conditioner/input.txt: -------------------------------------------------------------------------------- 1 | 10 20 2 | heat 3 | -------------------------------------------------------------------------------- /home_work_1/C_numbers/output.txt: -------------------------------------------------------------------------------- 1 | YES 2 | YES 3 | NO 4 | -------------------------------------------------------------------------------- /sample_contest/00/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | arr = s.split(' ') 3 | print(int(arr[0]) + int(arr[1])) -------------------------------------------------------------------------------- /home_work_1/C_numbers/input.txt: -------------------------------------------------------------------------------- 1 | 8(495)430-23-97 2 | +7-4-9-5-43-023-97 3 | 4-3-0-2-3-9-7 4 | 8-495-430 5 | -------------------------------------------------------------------------------- /home_work_3/A_diferent_num/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | arr = s.split() 3 | sett = set(arr) 4 | print(len(sett)) -------------------------------------------------------------------------------- /home_work_2/D_neighbors/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | numbers = s.split(' ') 3 | result = 0 4 | for i in range(1, len(numbers)-1): 5 | if int(numbers[i])>int(numbers[i-1]) and int(numbers[i])>int(numbers[i+1]): 6 | result += 1 7 | 8 | print(result) -------------------------------------------------------------------------------- /home_work_3/B_two_arr/main.py: -------------------------------------------------------------------------------- 1 | s1 = input() 2 | s2 = input() 3 | arr1 = s1.split() 4 | arr2 = s2.split() 5 | res = list(set(arr1) & set(arr2)) 6 | for i in range(0,len(res)): 7 | res[i] = int(res[i]) 8 | res.sort() 9 | for i in range(len(res)-1): 10 | print(res[i], end = " ") 11 | print(res[len(res)-1]) -------------------------------------------------------------------------------- /home_work_2/A_sortist/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | numbers = s.split(' ') 3 | def check(numbers): 4 | min = int(numbers[0]) 5 | for i in range(1, len(numbers)): 6 | 7 | if int(numbers[i]) > min: 8 | min = int(numbers[i]) 9 | else: 10 | return('NO') 11 | return('YES') 12 | 13 | print(check(numbers)) 14 | -------------------------------------------------------------------------------- /home_work_2/C_number/main.py: -------------------------------------------------------------------------------- 1 | n = int(input()) 2 | s = input() 3 | numbers = s.split(' ') 4 | x = int(input()) 5 | result = int(numbers[0]) 6 | razn = abs(int(numbers[0]) - x) 7 | 8 | for i in range(1,n): 9 | if abs(int(numbers[i]) - x) < razn: 10 | result = numbers[i] 11 | razn = abs(int(numbers[i]) - x) 12 | 13 | print(result) 14 | -------------------------------------------------------------------------------- /home_work_1/H_metro/main.py: -------------------------------------------------------------------------------- 1 | a = int(input()) 2 | b = int(input()) 3 | n = int(input()) 4 | m = int(input()) 5 | 6 | 7 | f_l_sl = (a+1)*n - a 8 | f_h_sl = (a+1)*n + a 9 | 10 | s_l_sl = (b+1)*m - b 11 | s_h_sl = (b+1)*m + b 12 | 13 | 14 | if s_l_sl>f_h_sl or f_l_sl>s_h_sl: 15 | print(-1) 16 | else: 17 | print(max(f_l_sl, s_l_sl),min(f_h_sl,s_h_sl)) -------------------------------------------------------------------------------- /home_work_1/D_UrKorn/main.py: -------------------------------------------------------------------------------- 1 | a, b, c = int(input()), int(input()), int(input()) 2 | if c < 0 or (a == 0 and b != c**2): 3 | print('NO SOLUTION') 4 | elif (a == 0 and b == c**2) or a == b == c == 0: 5 | print('MANY SOLUTIONS') 6 | else: 7 | if (c**2 - b) % a == 0: 8 | print(int((c**2 - b) / a)) 9 | else: 10 | print ('NO SOLUTION') 11 | -------------------------------------------------------------------------------- /home_work_1/B_triangle/main.py: -------------------------------------------------------------------------------- 1 | with open("input.txt", "r") as file: 2 | lines = file.readlines() 3 | 4 | a = int(lines[0].split()[0]) 5 | b = int(lines[1].split()[0]) 6 | c = int(lines[2].split()[0]) 7 | result = 'NO' 8 | 9 | if a+b>c and a+c>b and b+c>a: 10 | result = 'YES' 11 | 12 | 13 | 14 | with open("output.txt", "w") as file: 15 | file.write(result) 16 | -------------------------------------------------------------------------------- /home_work_1/G_det/main.py: -------------------------------------------------------------------------------- 1 | str_data = input() 2 | N, K, M = str_data.split() 3 | N = int(N) 4 | K = int(K) 5 | M = int(M) 6 | 7 | result = 0 8 | if M <= K: 9 | while N >= K: 10 | kol_zag = int(N / K) 11 | N_ost = N % K 12 | kol_det_s_zag = int(K / M) 13 | izl = K % M 14 | result += kol_zag * kol_det_s_zag 15 | N = N_ost + (izl * kol_zag) 16 | 17 | 18 | print(result) 19 | -------------------------------------------------------------------------------- /home_work_1/I_uznoc/main.py: -------------------------------------------------------------------------------- 1 | a = int(input()) 2 | b = int(input()) 3 | c = int(input()) 4 | d = int(input()) 5 | e = int(input()) 6 | 7 | result = 'NO' 8 | 9 | if ((a<=d) and (b<=e)) or ((a<=e) and (b<=d)): 10 | result = 'YES' 11 | 12 | if ((b<=d) and (c<=e)) or ((b<=e) and (c<=d)): 13 | result = 'YES' 14 | 15 | if ((c<=d) and (a<=e)) or ((c<=e) and (a<=d)): 16 | result = 'YES' 17 | 18 | print(result) 19 | -------------------------------------------------------------------------------- /home_work_1/A_conditioner/main.py: -------------------------------------------------------------------------------- 1 | with open("input.txt", "r") as file: 2 | lines = file.readlines() 3 | 4 | troom = int(lines[0].split()[0]) 5 | tcond = int(lines[0].split()[1]) 6 | work = lines[1].split()[0] 7 | 8 | if (work == 'freeze') and (tcond < troom): 9 | troom = tcond 10 | 11 | if (work == 'heat') and (tcond > troom): 12 | troom = tcond 13 | 14 | if work == 'auto': 15 | troom = tcond 16 | 17 | 18 | with open("output.txt", "w") as file: 19 | file.write(str(troom)) 20 | -------------------------------------------------------------------------------- /home_work_1/F_comp/main.py: -------------------------------------------------------------------------------- 1 | str_data = input() 2 | a1, b1, a2, b2 = str_data.split() 3 | a1 = int(a1) 4 | a2 = int(a2) 5 | b1 = int(b1) 6 | b2 = int(b2) 7 | 8 | 9 | stols = [] 10 | stols.append((a1+a2, max(b1,b2))) 11 | stols.append((a1+b2, max(b1,a2))) 12 | stols.append((max(a1, a2), b1 + b2)) 13 | stols.append((max(a1, b2), b1 + a2)) 14 | 15 | i_max = 0 16 | i = 0 17 | for stol in stols: 18 | 19 | if stol[0]*stol[1] < stols[i_max][0]*stols[i_max][1]: 20 | i_max = i 21 | i += 1 22 | 23 | print(stols[i_max][0], stols[i_max][1]) 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | Young&&Yandex 2 | 3 | Тренировки по алгоритмам 4 | 5 | Если вы хотите попасть на летнюю стажировку в Яндекс, но пока не уверены в своих силах, приходите на наши тренировки по алгоритмам. Тренировки пройдут в онлайн-формате, по вечерам — в 19:00. 6 | 7 | Вас ждёт: 8 | 9 | - 8 лекций с домашними заданиями на платформе Яндекс.Контест и ответы на ваши вопросы; 10 | - 4 занятия с проверкой домашних заданий, разбором решений и популярных ошибок. 11 | 12 | 13 | 14 | 15 | 16 | А ещё — у нас хорошие новости! Мы продлили регистрацию на летнюю стажировку до 5 июля, чтобы у вас было время потренироваться и подать заявку. -------------------------------------------------------------------------------- /home_work_2/A_sortist/readme.md: -------------------------------------------------------------------------------- 1 | 2 | A. Возрастает ли список? 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Дан список. Определите, является ли он монотонно возрастающим(то есть верно ли, что каждый элемент этого списка больше предыдущего). 10 | 11 | Выведите YES, если массив монотонно возрастает и NO в противном случае. 12 | 13 | Пример 1 14 | Ввод 15 | Вывод 16 | 17 | 1 7 9 18 | 19 | 20 | 21 | YES 22 | 23 | Пример 2 24 | Ввод 25 | Вывод 26 | 27 | 1 9 7 28 | 29 | 30 | 31 | NO 32 | 33 | Пример 3 34 | Ввод 35 | Вывод 36 | 37 | 2 2 2 38 | 39 | 40 | 41 | NO 42 | -------------------------------------------------------------------------------- /home_work_1/J_SLU/main.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | a = float(input()) 3 | b = float(input()) 4 | c = float(input()) 5 | d = float(input()) 6 | e = float(input()) 7 | f = float(input()) 8 | 9 | 10 | A = np.array([[a, b],[c, d]]) 11 | B = np.array([e, f]) 12 | 13 | C = np.array([[a, b, e],[c, d, f]]) 14 | 15 | """ 16 | По теореме Кронекера-Капелли система линейных уравнений имеет бесконечно много решений, если 17 | 1) определитель системы равен нулю, и 18 | 2) ранг расширенной матрицы системы равен рангу матрицы системы. 19 | """ 20 | 21 | if np.linalg.det(A) == 0 and np.linalg.matrix_rank(A) == np.linalg.matrix_rank(C): 22 | print('Бесконечно много решений') 23 | else: 24 | X = np.linalg.solve(A, B) 25 | print(2, X[0], X[1]) -------------------------------------------------------------------------------- /home_work_2/H_proizv3/readme.md: -------------------------------------------------------------------------------- 1 | 2 | H. Наибольшее произведение трех чисел 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | В данном списке из n ≤ 105 целых чисел найдите три числа,произведение которых максимально. 10 | 11 | Решение должно иметь сложность O(n), где n - размер списка. 12 | 13 | Выведите три искомых числа в любом порядке. 14 | 15 | Пример 1 16 | Ввод 17 | Вывод 18 | 19 | 3 5 1 7 9 0 9 -3 10 20 | 21 | 22 | 23 | 10 9 9 24 | 25 | Пример 2 26 | Ввод 27 | Вывод 28 | 29 | -5 -30000 -12 30 | 31 | 32 | 33 | -5 -12 -30000 34 | 35 | Пример 3 36 | Ввод 37 | Вывод 38 | 39 | 1 2 3 40 | 41 | 42 | 43 | 3 2 1 44 | -------------------------------------------------------------------------------- /home_work_1/C_numbers/main.py: -------------------------------------------------------------------------------- 1 | with open("input.txt", "r") as file: 2 | lines = file.readlines() 3 | 4 | 5 | change_lines = [] 6 | 7 | for line in lines: 8 | line = line.replace('-', '') 9 | line = line.replace ('+7', '8') 10 | line = line.replace ('(', '') 11 | line = line.replace (')', '') 12 | if line[0] != '8': 13 | line = '8495' + line 14 | change_lines.append(line) 15 | #print(change_lines) 16 | 17 | for i in range(1,4): 18 | if change_lines[0] == change_lines[i]: 19 | change_lines[i] = 'YES\n' 20 | else: 21 | change_lines[i] = 'NO\n' 22 | 23 | change_lines = change_lines[1:] 24 | #print(change_lines) 25 | 26 | 27 | with open("output.txt", "w") as file: 28 | file.writelines(change_lines) -------------------------------------------------------------------------------- /home_work_2/D_neighbors/readme.md: -------------------------------------------------------------------------------- 1 | 2 | D. Больше своих соседей 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Дан список чисел. Определите, сколько в этом списке элементов, которые больше двух своих соседей и выведите количество таких элементов. 10 | Формат ввода 11 | 12 | Вводится список чисел. Все числа списка находятся на одной строке. 13 | Формат вывода 14 | 15 | Выведите ответ на задачу. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 1 2 3 4 5 21 | 22 | 23 | 24 | 0 25 | 26 | Пример 2 27 | Ввод 28 | Вывод 29 | 30 | 5 4 3 2 1 31 | 32 | 33 | 34 | 0 35 | 36 | Пример 3 37 | Ввод 38 | Вывод 39 | 40 | 1 5 1 5 1 41 | 42 | 43 | 44 | 2 45 | -------------------------------------------------------------------------------- /home_work_3/A_diferent_num/readme.md: -------------------------------------------------------------------------------- 1 | 2 | A. Количество различных чисел 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Дан список чисел, который может содержать до 100000 чисел. Определите, сколько в нем встречается различных чисел. 10 | Формат ввода 11 | 12 | Вводится список целых чисел. Все числа списка находятся на одной строке. 13 | Формат вывода 14 | 15 | Выведите ответ на задачу. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 1 2 3 2 1 21 | 22 | 23 | 24 | 3 25 | 26 | Пример 2 27 | Ввод 28 | Вывод 29 | 30 | 1 2 3 4 5 6 7 8 9 10 31 | 32 | 33 | 34 | 10 35 | 36 | Пример 3 37 | Ввод 38 | Вывод 39 | 40 | 1 2 3 4 5 1 2 1 2 7 3 41 | 42 | 43 | 44 | 6 45 | -------------------------------------------------------------------------------- /home_work_1/B_triangle/readme.md: -------------------------------------------------------------------------------- 1 | 2 | B. Треугольник 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Даны три натуральных числа. Возможно ли построить треугольник с такими сторонами. Если это возможно, выведите строку YES, иначе выведите строку NO. 10 | 11 | Треугольник — это три точки, не лежащие на одной прямой. 12 | Формат ввода 13 | 14 | Вводятся три натуральных числа. 15 | Формат вывода 16 | 17 | Выведите ответ на задачу. 18 | Пример 1 19 | Ввод 20 | Вывод 21 | 22 | 3 23 | 4 24 | 5 25 | 26 | 27 | 28 | YES 29 | 30 | Пример 2 31 | Ввод 32 | Вывод 33 | 34 | 3 35 | 5 36 | 4 37 | 38 | 39 | 40 | 41 | YES 42 | 43 | Пример 3 44 | Ввод 45 | Вывод 46 | 47 | 4 48 | 5 49 | 3 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /home_work_2/G_proizv/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | numbers = s.split() 3 | 4 | max1 = min(int(numbers[0]), int(numbers[1])) 5 | max2 = max(int(numbers[0]), int(numbers[1])) 6 | 7 | min1 = max1 8 | min2 = max2 9 | 10 | max2_i = 0 11 | min1_i = 0 12 | for i in range(2, len(numbers)): 13 | numbers[i] = (int(numbers[i])) 14 | if numbers[i] > max2: 15 | max1 = max2 16 | max2 = numbers[i] 17 | max2_i = i 18 | 19 | if max1 < numbers[i] <= max2 and i != max2_i: 20 | max1 = numbers[i] 21 | 22 | if numbers[i] < min1: 23 | min2 = min1 24 | min1 = numbers[i] 25 | min1_i = i 26 | if min1 <= numbers[i] < min2 and i != min1_i: 27 | min2 = numbers[i] 28 | 29 | if max1 * max2 > min1 * min2: 30 | print(max1, max2) 31 | else: 32 | print(min1, min2) 33 | -------------------------------------------------------------------------------- /sample_contest/00/readme.md: -------------------------------------------------------------------------------- 1 | 2 | A. A+B 3 | 4 | 1 5 | Ограничение времени 2 секунды 6 | Ограничение памяти 64Mb 7 | Ввод стандартный ввод или input.txt 8 | Вывод стандартный вывод или output.txt 9 | Даны два числа A и B. Вам нужно вычислить их сумму A+B. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение. 10 | Формат ввода 11 | Первая строка входа содержит числа A и B (−2⋅109≤A,B≤2⋅109) разделенные пробелом 12 | Формат вывода 13 | В единственной строке выхода выведите сумму чисел A+B 14 | Пример 1 15 | Ввод 16 | Вывод 17 | 18 | 2 2 19 | 20 | 21 | 22 | 4 23 | 24 | Пример 2 25 | Ввод 26 | Вывод 27 | 28 | 57 43 29 | 30 | 31 | 32 | 100 33 | 34 | Пример 3 35 | Ввод 36 | Вывод 37 | 38 | 123456789 673243342 39 | 40 | 41 | 42 | 796700131 43 | 44 | -------------------------------------------------------------------------------- /home_work_1/I_uznoc/readme.md: -------------------------------------------------------------------------------- 1 | 2 | I. Узник замка Иф 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером D × E. Замок Иф сложен из кирпичей, размером A × B × C. Определите, сможет ли узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть параллельны сторонам отверстия. 10 | Формат ввода 11 | 12 | Программа получает на вход числа A, B, C, D, E. 13 | Формат вывода 14 | 15 | Программа должна вывести слово YES или NO. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 1 21 | 1 22 | 1 23 | 1 24 | 1 25 | 26 | 27 | 28 | YES 29 | 30 | Пример 2 31 | Ввод 32 | Вывод 33 | 34 | 2 35 | 2 36 | 2 37 | 1 38 | 1 39 | -------------------------------------------------------------------------------- /home_work_2/C_number/readme.md: -------------------------------------------------------------------------------- 1 | 2 | C. Ближайшее число 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу. 10 | Формат ввода 11 | 12 | В первой строке задается одно натуральное число N, не превосходящее 1000 – размер массива. Во второй строке содержатся N чисел – элементы массива (целые числа, не превосходящие по модулю 1000). В третьей строке вводится одно целое число x, не превосходящее по модулю 1000. 13 | Формат вывода 14 | 15 | Вывести значение элемента массива, ближайшее к x. Если таких чисел несколько, выведите любое из них. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 5 21 | 1 2 3 4 5 22 | 6 23 | 24 | 25 | 26 | 5 27 | 28 | Пример 2 29 | Ввод 30 | Вывод 31 | 32 | 5 33 | 5 4 3 2 1 34 | 3 35 | -------------------------------------------------------------------------------- /home_work_1/D_UrKorn/readme.md: -------------------------------------------------------------------------------- 1 | 2 | D. Уравнение с корнем 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Решите в целых числах уравнение: 10 | 11 | , 12 | 13 | a, b, c – данные целые числа: найдите все решения или сообщите, что решений в целых числах нет. 14 | Формат ввода 15 | 16 | Вводятся три числа a, b и c по одному в строке. 17 | 18 | Формат вывода 19 | 20 | Программа должна вывести все решения уравнения в порядке возрастания, либо NO SOLUTION (заглавными буквами), если решений нет. Если решений бесконечно много, вывести MANY SOLUTIONS. 21 | Пример 1 22 | Ввод 23 | Вывод 24 | 25 | 1 26 | 0 27 | 0 28 | 29 | 30 | 31 | 0 32 | 33 | Пример 2 34 | Ввод 35 | Вывод 36 | 37 | 1 38 | 2 39 | 3 40 | 41 | 42 | 43 | 7 44 | 45 | Пример 3 46 | Ввод 47 | Вывод 48 | 49 | 1 50 | 2 51 | -3 52 | 53 | 54 | 55 | NO SOLUTION 56 | -------------------------------------------------------------------------------- /home_work_2/F_simm/main.py: -------------------------------------------------------------------------------- 1 | n = int(input()) 2 | s = input() 3 | numbers = s.split() 4 | 5 | def simm(posl): 6 | i = 0 7 | j = len(posl)-1 8 | while j - i >= 1: 9 | 10 | if posl[i] == posl[j]: 11 | i += 1 12 | j -= 1 13 | else: 14 | return 0 15 | return 1 16 | 17 | for i in range(0,n): 18 | numbers[i] = int(numbers[i]) 19 | 20 | 21 | def find_idx(posl): 22 | el = posl[-1:] 23 | idxs = [] 24 | for i in range(0,len(posl)): 25 | if posl[i]==el[0]: 26 | idxs.append(i) 27 | return idxs 28 | 29 | def get_answ(idx,numbers): 30 | for id in idx: 31 | symbols = numbers[0:id] 32 | symbols = symbols[::-1] 33 | result = numbers + symbols 34 | 35 | if simm(result) == 1: 36 | return symbols 37 | 38 | if simm(numbers) == 0: 39 | idx = find_idx(numbers) 40 | 41 | res = (get_answ(idx,numbers)) 42 | ss='' 43 | for s in res: 44 | ss = ss+str(s)+' ' 45 | print(len(res)) 46 | print(ss[:-1]) 47 | else: 48 | print(0) 49 | -------------------------------------------------------------------------------- /home_work_2/B_posl/readme.md: -------------------------------------------------------------------------------- 1 | 2 | B. Определить вид последовательности 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | По последовательности чисел во входных данных определите ее вид: 10 | 11 | CONSTANT – последовательность состоит из одинаковых значений 12 | ASCENDING – последовательность является строго возрастающей 13 | WEAKLY ASCENDING – последовательность является нестрого возрастающей 14 | DESCENDING – последовательность является строго убывающей 15 | WEAKLY DESCENDING – последовательность является нестрого убывающей 16 | RANDOM – последовательность не принадлежит ни к одному из вышеупомянутых типов 17 | 18 | Формат ввода 19 | 20 | По одному на строке поступают числа последовательности ai, |ai| ≤ 109. 21 | 22 | Признаком окончания последовательности является число -2× 109. Оно в последовательность не входит. 23 | Формат вывода 24 | 25 | В единственной строке выведите тип последовательности. 26 | Пример 27 | Ввод 28 | Вывод 29 | 30 | -530 31 | -530 32 | -530 33 | -530 34 | -530 35 | -530 36 | -2000000000 37 | -------------------------------------------------------------------------------- /home_work_1/F_comp/readme.md: -------------------------------------------------------------------------------- 1 | 2 | F. Расстановка ноутбуков 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | В школе решили на один прямоугольный стол поставить два прямоугольных ноутбука. Ноутбуки нужно поставить так, чтобы их стороны были параллельны сторонам стола. Определите, какие размеры должен иметь стол, чтобы оба ноутбука на него поместились, и площадь стола была минимальна. 10 | 11 | Формат ввода 12 | 13 | Вводится четыре натуральных числа, первые два задают размеры одного ноутбука, а следующие два — размеры второго. Числа не превышают 1000. 14 | 15 | Формат вывода 16 | 17 | Выведите два числа — размеры стола. Если возможно несколько ответов, выведите любой из них (но только один). 18 | 19 | Пример 1 20 | Ввод 21 | Вывод 22 | 23 | 10 2 2 10 24 | 25 | 26 | 27 | 20 2 28 | 2 20 29 | 4 10 30 | 10 4 31 | 32 | Пример 2 33 | Ввод 34 | Вывод 35 | 36 | 5 7 3 2 37 | 38 | 39 | 40 | 9 5 41 | 5 9 42 | 43 | Примечания 44 | 45 | В примерах указаны всевозможные ответы на поставленную задачу. Ваша программа должна вывести один из них. 46 | 47 | -------------------------------------------------------------------------------- /home_work_2/E_chemp/main.py: -------------------------------------------------------------------------------- 1 | n = int(input()) 2 | s = input() 3 | numbers = s.split(' ') 4 | for i in range(0, n): 5 | numbers[i] = int(numbers[i]) 6 | 7 | pobed = max(numbers) 8 | #print('Бросок победителя - ',pobed) 9 | 10 | def get_id_pobed(numbers,n): 11 | res=[] 12 | for i in range(0, n): 13 | if numbers[i]==pobed: 14 | res.append(i) 15 | return min(res) 16 | 17 | id_pobed = get_id_pobed(numbers,n) 18 | #print('ИД победителя - ',id_pobed) 19 | 20 | 21 | def get_meters_vasy(numbers,id_pobed, n): 22 | result = [] 23 | for i in range(id_pobed+1, n-1): 24 | 25 | if (str(numbers[i])[-1:] == '5') and (numbers[i+1] < numbers[i]): 26 | result.append(numbers[i]) 27 | if result: 28 | return max(result) 29 | else: 30 | return 1001 31 | 32 | 33 | def get_pos(n, numbers, vas_res): 34 | for i in range(0,n): 35 | if numbers[i] == vas_res: 36 | return i+1 37 | 38 | 39 | vas_res = get_meters_vasy(numbers, id_pobed, n) 40 | #print(vas_res) 41 | if vas_res != 1001: 42 | numbers.sort(reverse=True) 43 | print(get_pos(n, numbers, vas_res)) 44 | else: 45 | print(0) 46 | -------------------------------------------------------------------------------- /home_work_2/H_proizv3/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | numbers = s.split() 3 | 4 | maxs = numbers[:3] 5 | maxs.sort() 6 | maxs[0] = int(maxs[0]) 7 | maxs[1] = int(maxs[1]) 8 | maxs[2] = int(maxs[2]) 9 | 10 | 11 | mins = numbers[:2] 12 | mins.sort(reverse=True) 13 | mins[0] = int(mins[0]) 14 | mins[1] = int(mins[1]) 15 | 16 | 17 | for i in range(2, len(numbers)): 18 | numbers[i] = (int(numbers[i])) 19 | if i>2: 20 | if numbers[i] > maxs[2]: 21 | maxs[0] = maxs[1] 22 | maxs[1] = maxs[2] 23 | maxs[2] = numbers[i] 24 | elif maxs[1] < numbers[i] <= maxs[2]: 25 | maxs[0] = maxs[1] 26 | maxs[1] = numbers[i] 27 | elif maxs[0] < numbers[i] <= maxs[1]: 28 | maxs[0] = numbers[i] 29 | 30 | if numbers[i] < mins[0]: 31 | mins[1] = mins[0] 32 | mins[0] = numbers[i] 33 | elif mins[0] <= numbers[i] < mins[1]: 34 | mins[1] = numbers[i] 35 | 36 | 37 | if mins[0]<0 and mins[1]<0 and len(numbers)>3: 38 | if maxs[0] * maxs[1]*maxs[2] > (mins[0] * mins[1])*maxs[2]: 39 | print(maxs[0], maxs[1], maxs[2]) 40 | else: 41 | print(mins[0], mins[1], maxs[2]) 42 | else: 43 | print (maxs [0], maxs [1], maxs [2]) 44 | -------------------------------------------------------------------------------- /home_work_1/G_det/readme.md: -------------------------------------------------------------------------------- 1 | 2 | G. Детали 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Имеется N кг металлического сплава. Из него изготавливают заготовки массой K кг каждая. После этого из каждой заготовки вытачиваются детали массой M кг каждая (из каждой заготовки вытачивают максимально возможное количество деталей). Если от заготовок после этого что-то остается, то этот материал возвращают к началу производственного цикла и сплавляют с тем, что осталось при изготовлении заготовок. Если того сплава, который получился, достаточно для изготовления хотя бы одной заготовки, то из него снова изготавливают заготовки, из них – детали и т.д. Напишите программу, которая вычислит, какое количество деталей может быть получено по этой технологии из имеющихся исходно N кг сплава. 10 | Формат ввода 11 | 12 | Вводятся N, K, M. Все числа натуральные и не превосходят 200. 13 | Формат вывода 14 | 15 | Выведите одно число — количество деталей, которое может получиться по такой технологии. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 10 5 2 21 | 22 | 23 | 24 | 4 25 | 26 | Пример 2 27 | Ввод 28 | Вывод 29 | 30 | 13 5 3 31 | 32 | 33 | 34 | 3 35 | 36 | Пример 3 37 | Ввод 38 | Вывод 39 | 40 | 14 5 3 41 | 42 | 43 | 44 | 4 45 | -------------------------------------------------------------------------------- /home_work_1/E_umbalance/readme.md: -------------------------------------------------------------------------------- 1 | 2 | E. Скорая помощь 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры K1, а затем связь прервалась. Однако он вспомнил, что по этому же адресу дома некоторое время назад скорая помощь выезжала в квартиру K2, которая расположена в подъезда P2 на этаже N2. Известно, что в доме M этажей и количество квартир на каждой лестничной площадке одинаково. Напишите программу, которая вычилсяет номер подъезда P1 и номер этажа N1 квартиры K1. 10 | Формат ввода 11 | 12 | Во входном файле записаны пять положительных целых чисел K1, M, K2, P2, N2. Все числа не превосходят 106. 13 | Формат вывода 14 | 15 | Выведите два числа P1 и N1. Если входные данные не позволяют однозначно определить P1 или N1, вместо соответствующего числа напечатайте 0. Если входные данные противоречивы, напечатайте два числа –1 (минус один). 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 89 20 41 1 11 21 | 22 | 23 | 24 | 2 3 25 | 26 | Пример 2 27 | Ввод 28 | Вывод 29 | 30 | 11 1 1 1 1 31 | 32 | 33 | 34 | 0 1 35 | 36 | Пример 3 37 | Ввод 38 | Вывод 39 | 40 | 3 2 2 2 1 41 | 42 | 43 | 44 | -1 -1 45 | -------------------------------------------------------------------------------- /home_work_2/F_simm/readme.md: -------------------------------------------------------------------------------- 1 | 2 | F. Симметричная последовательность 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Последовательность чисел назовем симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными: 1 2 3 4 5 4 3 2 1 1 2 1 2 2 1 2 1 Вашей программе будет дана последовательность чисел. Требуется определить, какое минимальное количество и каких чисел надо приписать в конец этой последовательности, чтобы она стала симметричной. 10 | 11 | Формат ввода 12 | 13 | Сначала вводится число N — количество элементов исходной последовательности (1 ≤ N ≤ 100). Далее идут N чисел — элементы этой последовательности, натуральные числа от 1 до 9. 14 | 15 | Формат вывода 16 | 17 | Выведите сначала число M — минимальное количество элементов, которое надо дописать к последовательности, а потом M чисел (каждое — от 1 до 9) — числа, которые надо дописать к последовательности. 18 | 19 | Пример 1 20 | Ввод 21 | Вывод 22 | 23 | 9 24 | 1 2 3 4 5 4 3 2 1 25 | 26 | 27 | 28 | 0 29 | 30 | Пример 2 31 | Ввод 32 | Вывод 33 | 34 | 5 35 | 1 2 1 2 2 36 | 37 | 38 | 39 | 3 40 | 1 2 1 41 | 42 | Пример 3 43 | Ввод 44 | Вывод 45 | 46 | 5 47 | 1 2 3 4 5 48 | 49 | 50 | 51 | 4 52 | 4 3 2 1 53 | -------------------------------------------------------------------------------- /home_work_2/B_posl/main.py: -------------------------------------------------------------------------------- 1 | posl = [] 2 | s = int(input()) 3 | 4 | while s != -2000000000: 5 | posl.append(s) 6 | s = int(input ()) 7 | 8 | 9 | def const(posl): 10 | count = posl[0] 11 | for i in range(1, len(posl)): 12 | if posl[i]!=count: 13 | return 0 14 | return 'CONSTANT' 15 | 16 | def weak_ascending(posl): 17 | count = posl [0] 18 | for i in range (1, len (posl)): 19 | if posl [i] >= count: 20 | count = posl [i] 21 | else: 22 | return 0 23 | return 'WEAKLY ASCENDING' 24 | 25 | def weak_desscending(posl): 26 | count = posl [0] 27 | for i in range (1, len (posl)): 28 | if posl [i] <= count: 29 | count = posl [i] 30 | else: 31 | return 0 32 | return 'WEAKLY DESCENDING' 33 | 34 | def ascending(posl): 35 | count = posl[0] 36 | for i in range (1, len (posl)): 37 | #print(posl[i],count) 38 | if posl [i] > count: 39 | count = posl[i] 40 | else: 41 | return 0 42 | return 'ASCENDING' 43 | 44 | def descending(posl): 45 | count = posl[0] 46 | for i in range (1, len (posl)): 47 | #print(posl[i],count) 48 | if posl [i] < count: 49 | count = posl[i] 50 | else: 51 | return 0 52 | return 'DESCENDING' 53 | 54 | def check(posl): 55 | if const(posl) != 0: 56 | return('CONSTANT') 57 | if ascending(posl) != 0: 58 | return 'ASCENDING' 59 | if weak_ascending(posl) != 0: 60 | return 'WEAKLY ASCENDING' 61 | if descending(posl) != 0: 62 | return 'DESCENDING' 63 | if weak_desscending(posl) != 0: 64 | return 'WEAKLY DESCENDING' 65 | return 'RANDOM' 66 | 67 | if len(posl)>0: 68 | print(check(posl)) 69 | else: 70 | print('RANDOM') 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /home_work_2/G_proizv/readme.md: -------------------------------------------------------------------------------- 1 | 2 | G. Наибольшее произведение двух чисел 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Дан список, заполненный произвольными целыми числами. Найдите в этом списке два числа, произведение которых максимально. Выведите эти числа в порядке неубывания. 10 | 11 | Список содержит не менее двух элементов. Числа подобраны так, что ответ однозначен. 12 | 13 | Решение должно иметь сложность O(n), где n - размер списка. 14 | 15 | Пример 1 16 | Ввод 17 | Вывод 18 | 19 | 4 3 5 2 5 20 | 21 | 22 | 23 | 5 5 24 | 25 | Пример 2 26 | Ввод 27 | Вывод 28 | 29 | -4 3 -5 2 5 30 | 31 | 32 | 33 | -5 -4 34 | 35 | Пример 3 36 | Ввод 37 | Вывод 38 | 39 | 12288 -10075 29710 15686 -18900 -17715 15992 24431 6220 28403 -23148 18480 -22905 5411 -7602 15560 -26674 11109 -4323 6146 -1523 4312 10666 -15343 -17679 7284 20709 -7103 24305 14334 -12281 17314 26061 25616 17453 16618 -24230 -19788 21172 11339 2202 -22442 -20997 1879 -8773 -8736 5310 -23372 12621 -25596 -28609 -13309 -13 10336 15812 -21193 21576 -1897 -12311 -6988 -25143 -3501 23231 26610 12618 25834 -29140 21011 23427 1494 15215 23013 -15739 8325 5359 -12932 18111 -72 -12509 20116 24390 1920 17487 25536 24934 -6784 -16417 -2222 -16569 -25594 4491 14249 -28927 27281 3297 5998 6259 4577 12415 3779 -8856 3994 19941 11047 2866 -24443 -17299 -9556 12244 6376 -13694 -14647 -22225 21872 7543 -6935 17736 -2464 9390 1133 18202 -9733 -26011 13474 29793 -26628 -26124 27776 970 14277 -23213 775 -9318 29014 -5645 -27027 -21822 -17450 -5 -655 22807 -20981 16310 27605 -18393 914 7323 599 -12503 -28684 5835 -5627 25891 -11801 21243 -21506 22542 -5097 8115 178 10427 25808 10836 -11213 18488 21293 14652 12260 42 21034 8396 -27956 13670 -296 -757 18076 -15597 4135 -25222 -19603 8007 6012 2704 28935 16188 -20848 13502 -11950 -24466 5440 26348 27378 7990 -11523 -26393 40 | 41 | 42 | 43 | 29710 29793 44 | -------------------------------------------------------------------------------- /home_work_2/I_saper/main.py: -------------------------------------------------------------------------------- 1 | s = input() 2 | N, M, K = s.split() 3 | N = int(N) 4 | M = int(M) 5 | K = int(K) 6 | 7 | pole = [] 8 | for i in range(0, N): 9 | pole.append([None] * M) 10 | 11 | for i in range(0, K): 12 | s = input() 13 | arr = s.split() 14 | pole[int(arr[0])-1][int(arr[1])-1] = '*' 15 | 16 | for j in range(0, len(pole)): 17 | 18 | for i in range(0, len(pole[0])): 19 | 20 | if pole[j][i] is None: 21 | res = 0 22 | try: 23 | if pole[j][i-1] == '*' and i-1 >= 0: 24 | res +=1 25 | except: 26 | pass 27 | 28 | try: 29 | if pole[j][i+1] == '*': 30 | res +=1 31 | except: 32 | pass 33 | 34 | 35 | try: 36 | if pole[j-1][i] == '*' and j-1>=0: 37 | res +=1 38 | except: 39 | pass 40 | 41 | try: 42 | if pole[j+1][i] == '*': 43 | res +=1 44 | except: 45 | pass 46 | 47 | 48 | 49 | try: 50 | if pole[j-1][i-1] == '*' and i-1 >= 0 and j-1>=0: 51 | res +=1 52 | except: 53 | pass 54 | 55 | try: 56 | if pole[j-1][i+1] == '*' and j-1>=0: 57 | res +=1 58 | except: 59 | pass 60 | 61 | 62 | 63 | try: 64 | if pole[j+1][i-1] == '*' and i-1 >= 0: 65 | res +=1 66 | 67 | except: 68 | pass 69 | 70 | try: 71 | if pole[j+1][i+1] == '*': 72 | res +=1 73 | except: 74 | pass 75 | 76 | 77 | pole[j][i] = res 78 | 79 | 80 | for st in pole: 81 | ss = '' 82 | for s in st: 83 | ss = ss+str(s)+' ' 84 | print(ss[:-1]) 85 | 86 | -------------------------------------------------------------------------------- /home_work_1/C_numbers/readme.md: -------------------------------------------------------------------------------- 1 | 2 | C. Телефонные номера 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Телефонные номера в адресной книге мобильного телефона имеют один из следующих форматов: +7<код><номер> 8<код><номер> <номер> где <номер> — это семь цифр, а <код> — это три цифры или три цифры в круглых скобках. Если код не указан, то считается, что он равен 495. Кроме того, в записи телефонного номера может стоять знак “-” между любыми двумя цифрами (см. пример). На данный момент в адресной книге телефона Васи записано всего три телефонных номера, и он хочет записать туда еще один. Но он не может понять, не записан ли уже такой номер в телефонной книге. Помогите ему! Два телефонных номера совпадают, если у них равны коды и равны номера. Например, +7(916)0123456 и 89160123456 — это один и тот же номер. 10 | Формат ввода 11 | 12 | В первой строке входных данных записан номер телефона, который Вася хочет добавить в адресную книгу своего телефона. В следующих трех строках записаны три номера телефонов, которые уже находятся в адресной книге телефона Васи. Гарантируется, что каждая из записей соответствует одному из трех приведенных в условии форматов. 13 | Формат вывода 14 | 15 | Для каждого телефонного номера в адресной книге выведите YES (заглавными буквами), если он совпадает с тем телефонным номером, который Вася хочет добавить в адресную книгу или NO (заглавными буквами) в противном случае. 16 | Пример 1 17 | Ввод 18 | Вывод 19 | 20 | 8(495)430-23-97 21 | +7-4-9-5-43-023-97 22 | 4-3-0-2-3-9-7 23 | 8-495-430 24 | 25 | 26 | 27 | YES 28 | YES 29 | NO 30 | 31 | Пример 2 32 | Ввод 33 | Вывод 34 | 35 | 86406361642 36 | 83341994118 37 | 86406361642 38 | 83341994118 39 | 40 | 41 | 42 | NO 43 | YES 44 | NO 45 | 46 | Пример 3 47 | Ввод 48 | Вывод 49 | 50 | +78047952807 51 | +78047952807 52 | +76147514928 53 | 88047952807 54 | 55 | 56 | 57 | YES 58 | NO 59 | YES 60 | -------------------------------------------------------------------------------- /home_work_2/E_chemp/readme.md: -------------------------------------------------------------------------------- 1 | 2 | E. Чемпионат по метанию коровьих лепешек 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | Ежегодный турнир "Веселый коровяк" - по метанию коровьих лепешек на дальность - прошел 8-9 июля в селе Крылово Осинского района Пермского края. 10 | 11 | Участники соревнований кидают "снаряд" - спрессованный навоз, выбирая его из заранее заготовленной кучи. Желающих поупражняться в силе броска традиционно очень много - как мужчин, так и женщин. Каждую лепешку, которую метнули участники "Веселого коровяка", внимательно осматривали женщины в костюмах коров и тщательно замеряли расстояние. 12 | 13 | Соревнования по метанию коровьих лепешек проводятся в Пермском крае с 2009 года. 14 | 15 | К сожалению, после чемпионата потерялись записи с фамилиями участников, остались только записи о длине броска в том порядке, в котором их совершали участники. 16 | 17 | Трактиорист Василий помнит три факта: 18 | 19 | 1) Число метров, на которое он метнул лепешку, оканчивалось на 5 20 | 21 | 2) Один из победителей чемпионата метал лепешку до Василия 22 | 23 | 3) Участник, метавший лепешку сразу после Василия, метнул ее на меньшее количество метров 24 | 25 | Будем считать, что участник соревнования занял k-е место, если ровно (k − 1) участников чемпионата метнули лепешку строго дальше, чем он. 26 | 27 | Какое максимально высокое место мог занять Василий? 28 | Формат ввода 29 | 30 | Первая строка входного файла содержит целое число n — количество участников чемпионата по метанию лепешек (3 ≤ n ≤ 105). 31 | 32 | Вторая строка входного файла содержит n положительных целых чисел, каждое из которых не превышает 1000, — дальность броска участников чемпионата, приведенные в том порядке, в котором происходило метание. 33 | Формат вывода 34 | 35 | Выведите самое высокое место, которое мог занять тракторист Василий. Если не существует ни одного участника чемпионата, который удовлетворяет, описанным выше условиям, выведите число 0. 36 | 37 | Пример 1 38 | Ввод 39 | Вывод 40 | 41 | 7 42 | 10 20 15 10 30 5 1 43 | 44 | 45 | 46 | 6 47 | 48 | Пример 2 49 | Ввод 50 | Вывод 51 | 52 | 3 53 | 15 15 10 54 | 55 | 56 | 57 | 1 58 | 59 | Пример 3 60 | Ввод 61 | Вывод 62 | 63 | 3 64 | 10 15 20 65 | 66 | 67 | 68 | 0 69 | -------------------------------------------------------------------------------- /home_work_1/H_metro/readme.md: -------------------------------------------------------------------------------- 1 | 2 | H. Метро 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | На некоторых кросс-платформенных станциях метро (как, например, «Третьяковская») на разные стороны платформы приходят поезда разных направлений. Таня договорилась встретиться с подругой на такой станции, но поскольку подруга приехала из другого часового пояса, то из-за джетлага сильно проспала, и Тане пришлось долго её ждать. Поезда всегда ходят точно по расписанию, и Таня знает, что поезд стоит на платформе ровно одну минуту, а интервал между поездами (время, в течение которого поезда у платформы нет) составляет a минут для поездов на первом пути и b минут для поездов на втором пути. То есть на первый путь приезжает поезд и стоит одну минуту, затем в течение a минут поезда у платформы нет, затем в течение одной минуты у платформы стоит следующий поезд и т. д. 10 | 11 | Пока Таня стояла на платформе, она насчитала n поездов на первом пути и m поездов на втором пути. Определите минимальное и максимальное время, которое Таня могла провести на платформе, или сообщите, что она точно сбилась со счёта. 12 | 13 | Все поезда, которые видела Таня, она наблюдала в течение всей минуты, то есть Таня не приходит и не уходит с платформы посередине той минуты, когда поезд стоит на платформе. 14 | Формат ввода 15 | 16 | Первая строка входных данных содержит число a — интервал между поездами на первом пути. Вторая строка содержит число b — интервал между поездами на втором пути. Третья строка содержит число n — количество поездов на первом пути, которые увидела Таня. Четвёртая строка содержит число m — количество поездов на втором пути, которые увидела Таня. Все числа — целые, от 1 до 1000. 17 | Формат вывода 18 | 19 | Программа должна вывести два числа: минимальное и максимальное время в минутах, которое Таня могла стоять на платформе, или одно число -1, если Таня точно ошиблась. 20 | Пример 1 21 | Ввод 22 | Вывод 23 | 24 | 1 25 | 3 26 | 3 27 | 2 28 | 29 | 30 | 31 | 5 7 32 | 33 | Пример 2 34 | Ввод 35 | Вывод 36 | 37 | 1 38 | 5 39 | 1 40 | 2 41 | 42 | 43 | 44 | -1 45 | 46 | Примечания 47 | 48 | В первом примере по первому пути поезда ходят через 1 минуту. По второму — через 3. Стоя на платформе 5, 6 или 7 минут, Таня могла насчитать 3 поезда на первом пути и 2 на втором. -------------------------------------------------------------------------------- /home_work_1/A_conditioner/readme.md: -------------------------------------------------------------------------------- 1 | 2 | A. Кондиционер 3 | 4 | Ограничение времени 1 секунда 5 | Ограничение памяти 64Mb 6 | Ввод стандартный ввод или input.txt 7 | Вывод стандартный вывод или output.txt 8 | 9 | В офисе, где работает программист Петр, установили кондиционер нового типа. Этот кондиционер отличается особой простотой в управлении. У кондиционера есть всего лишь два управляемых параметра: желаемая температура и режим работы. 10 | 11 | Кондиционер может работать в следующих четырех режимах: 12 | 13 | «freeze» — охлаждение. В этом режиме кондиционер может только уменьшать температуру. Если температура в комнате и так не больше желаемой, то он выключается. 14 | 15 | «heat» — нагрев. В этом режиме кондиционер может только увеличивать температуру. Если температура в комнате и так не меньше желаемой, то он выключается. 16 | 17 | «auto» — автоматический режим. В этом режиме кондиционер может как увеличивать, так и уменьшать температуру в комнате до желаемой. 18 | 19 | «fan» — вентиляция. В этом режиме кондиционер осуществляет только вентиляцию воздуха и не изменяет температуру в комнате. 20 | 21 | Кондиционер достаточно мощный, поэтому при настройке на правильный режим работы он за час доводит температуру в комнате до желаемой. 22 | 23 | Требуется написать программу, которая по заданной температуре в комнате troom, установленным на кондиционере желаемой температуре tcond и режиму работы определяет температуру, которая установится в комнате через час. 24 | Формат ввода 25 | 26 | Первая строка входного файла содержит два целых числа troom, и tcond, разделенных ровно одним пробелом (–50 ≤ troom ≤ 50, –50 ≤ tcond ≤ 50). 27 | 28 | Вторая строка содержит одно слово, записанное строчными буквами латинского алфавита — режим работы кондиционера. 29 | Формат вывода 30 | 31 | Выходной файл должен содержать одно целое число — температуру, которая установится в комнате через час. 32 | 33 | Пример 1 34 | Ввод 35 | Вывод 36 | 37 | 10 20 38 | heat 39 | 40 | 41 | 42 | 20 43 | 44 | Пример 2 45 | Ввод 46 | Вывод 47 | 48 | 10 20 49 | freeze 50 | 51 | 52 | 53 | 10 54 | 55 | Примечания 56 | 57 | В первом примере кондиционер находится в режиме нагрева. Через час он нагреет комнату до желаемой температуры в 20 градусов. 58 | 59 | Во втором примере кондиционер находится в режиме охлаждения. Поскольку температура в комнате ниже, чем желаемая, кондиционер самостоятельно выключается и температура в комнате не поменяется. 60 | -------------------------------------------------------------------------------- /home_work_1/E_umbalance/main.py: -------------------------------------------------------------------------------- 1 | import math 2 | str_data = input() 3 | K1, M, K2, P2, N2 = str_data.split() 4 | 5 | def get(K1, M, K2, P2, N2): 6 | num_room_on_floor = [] 7 | """ 8 | Узнаем предположительное количесвто квартир на этаже 9 | (может быть не один вариант количества - поэтому внесем это в массив) 10 | Обработаем случай этаж второй квартиры = 1 11 | """ 12 | result = [0, 0] 13 | num_room_on_fl = math.ceil(int(K2)/((int(P2)-1)*int(M)+int(N2))) 14 | num_room_on_floor.append(num_room_on_fl) 15 | if (N2 == 1) and (P2 == 1): 16 | if K1<=K2: 17 | return (1, 1) 18 | else: 19 | if math.ceil(K1/K2) <= M: 20 | result[0] = 1 21 | else: 22 | result[0] = 0 23 | result[1] = 0 24 | else: 25 | while (math.ceil(K2 / num_room_on_fl) == N2): 26 | num_room_on_floor.append(num_room_on_fl) 27 | num_room_on_fl += 1 28 | if len(num_room_on_floor) == 0: 29 | return (-1, -1) 30 | 31 | print('Кол-во квартир на этаже может быть - ', num_room_on_floor) 32 | 33 | """ 34 | Узнаем подъезд и этаж для каждого варианта кол-ва квартир на этаже 35 | """ 36 | 37 | pods = [] 38 | flors = [] 39 | for num_room in num_room_on_floor: 40 | pods.append(int((int(K1) - 1) / (int(M) * num_room)) + 1) 41 | flors.append(int((int(K1)-1)%(int(M)*num_room)/num_room)+1) 42 | 43 | print('Возможные подъезды - ', pods) 44 | print ('Возможные этажи - ', flors) 45 | 46 | if len(set(pods)) == 1: 47 | result[0] = pods[0] 48 | else: 49 | result[0] = 0 50 | 51 | if len(set(flors)) == 1: 52 | result[1] = flors[0] 53 | else: 54 | result [1] = 0 55 | 56 | """ 57 | Частные случаи 58 | """ 59 | if M==1: 60 | result[1] = 1; 61 | 62 | return result 63 | 64 | 65 | ret = get(int(K1), int(M), int(K2), int(P2), int(N2)) 66 | print(ret) 67 | if isinstance(ret, list): 68 | if ret[0] != 0 and ret[1] != 0: 69 | check = get(int(K2), int(M), int(K1), int(ret[0]), int(ret[1])) 70 | print(check) 71 | 72 | if (check[0] == int(P2) and check[1] == int(N2)): 73 | print(ret[0], ret[1]) 74 | else: 75 | print(-1, -1) 76 | else: 77 | print(ret[0], ret[1]) 78 | else: 79 | print(ret[0], ret[1]) 80 | --------------------------------------------------------------------------------