Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов.
Метеорологическая станция ведёт наблюдение за количеством выпавших осадков. Показания записываются каждую минуту в течении минут. Определеяется пара измерений, между которыми прошло не менее минут. Найдите максимальную сумму показаний среди таких пар.
Входные данные:
Даны два входных файла(A и B), каждый из которых в первой строке содержит число - количество измерений, а также через пробел число - минимальное количество минут между искомыми измерениями. В каждой из следующих строк находится число: количество выпавших осадков.
Пример входных данных:
Для указанных входных данных ответом будет .
В ответе укажите одно число: значение искомой величины для файла А. Файл Б для тех кто хочет проверить свои знания, ответ: 174980.
def neeff(a, k): # Неэффективный алгоритм m = -10**9 n = len(a) for i in range(n): for j in range(i + k, n): m = max(m, a[i] + a[j]) return m def eff(a, k): # Эффективный m = -10**9 n = len(a) maxim = -10**20 for i in range(k - 1, n): m = max(m, a[i] + maxim) # a[i - (k - 1)] --> свалку maxim = max(maxim, a[i - (k - 1)]) return m def eff_stat(a, k): # Эффективный статический b = [] m = -10**9 n = len(a) for i in range(n): b.append((a[i], i)) b.sort() if len(b) >= 100: c = b[-100:] else: c = b.copy() for x in range(len(c)): for y in range(x + 1, len(c)): if abs(c[x][1] - c[y][1]) >= k: m = max(m, c[x][0] + c[y][0]) return m f = open(’Задача_27.txt’) n, k = [int(s) for s in f.readline().split()] a = [int(s) for s in f] print(eff(a, k))
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность натуральных чисел. Найдите непрерывную последовательность с максимальной суммой, в которой количество нечетных элементов кратно . В качестве ответа выведите сумму данной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число — количество чисел. Каждая из следующих строк содержит натуральное число, меньшее 10000.
В ответе укажите два числа: сначала значение для файла , затем для файла .
f = open(’test.txt’) n = int(f.readline()) s = 0 # Сумма всех чисел count_nch = 0 min_s = [10000000]*10 min_s[0] = 0 s_max = 0 for i in range(n): x = int(f.readline()) s += x count_nch += 1*(x % 2 != 0) if s - min_s[count_nch % 10] > s_max: s_max = s - min_s[count_nch % 10] if s < min_s[count_nch % 10]: min_s[count_nch % 10] = s print(s_max)
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность натуральных чисел. Найдите непрерывную последовательность, внутри которой сумма элементов на нечетных позициях равна сумме элементов на четных позициях. В качестве ответа выведите сумму данной последовательности. Если их несколько, то в качестве ответа укажите наибольшую из сумм.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число — количество чисел. Каждая из следующих строк содержит натуральное число, меньшее .
В ответе укажите два числа: сначала значение для файла , затем для файла .
f = open(’27A_2.txt’) n = int(f.readline()) s_chet = 0 s_nechet = 0 min_ps = [10e20] * 100000000 ans = 0 for i in range(n): x = int(f.readline()) s_chet += x * (i % 2 == 0) s_nechet += x * (i % 2 != 0) s = s_chet + s_nechet l = s_nechet - s_chet ans = max(ans, s - min_ps[l]) min_ps[l] = min(min_ps[l], s) print(ans)
Ошибка.
Попробуйте повторить позже
Дано число затем натуральных чисел. Найти количество троек чисел, где элементы будут представлять собой строго возрастающую геометрическую прогрессию. Знаменатель геометрической прогрессии – натуральное число большее .
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее .
В ответе укажите одно число: значение для файла А.
Файл Б для тех, кто уверен в своих силах. Ответ для него: 75392942
n = int(input()) mask = [0] * 10001 for i in range(n): mask[int(input())] += 1 ans = 0 for i in range(2, 101): for j in range(1, 10000 + 1): if j * i * i > 10000: break if mask[j] * mask[j * i] * mask[j * i * i] > 0: ans += mask[j] * mask[j * i] * mask[j * i * i] print(ans)
Ошибка.
Попробуйте повторить позже
Дано число затем натуральных чисел. Найдите количество пар чисел, где произведение чисел будет кратно , но некратно , а сумма будет иметь остаток при делении на .
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее .
n = int(input()) sv = [[0]*10 for i in range(8+1)] ans = 0 for i in range(n): x = int(input()) if x % 16 != 0: for j in [8, 4, 2, 1]: if j * x % 8 == 0 and j * x % 16 != 0: for k in range(10): if (k + x) % 10 == 4: ans += sv[j][k] for j in [8, 4, 2, 1]: if x % j == 0: sv[j][x % 10] += 1 break print(ans)
Ошибка.
Попробуйте повторить позже
Дано число , затем натуральных чисел. Найдите количество пар элементов, где оба элемента будут являться различными числами, при этом хотя бы одно число является полным квадратом.
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее .
n = int(input()) # Количество полных квадратов # mask[i] -- количество чисел i mask = [0]*10001 count = 0 # Общее количество квадратов на данной итерации ans = 0 for i in range(n): x = int(input()) if x ** 0.5 == int(x ** 0.5): # Пары, где оба числа квадраты # и пары, где x - квадрат, а другое нет ans += count - mask[x] + (i - count) mask[x] += 1 count += 1 else: ans += count print(ans)
Ошибка.
Попробуйте повторить позже
Дано число , затем натуральных чисел. Найдите количество пар элементов, где оба элемента будут являться различными числами, при этом оба числа являются полными квадратами.
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее .
n = int(input()) # Количество полных квадратов # mask[i] -- количество чисел i mask = [0]*10001 count = 0 # Общее количество квадратов на данной итерации ans = 0 for i in range(n): x = int(input()) if x**0.5 == int(x**0.5): ans += count - mask[x] mask[x] += 1 count += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Крабодел составил список точек плоскости с целочисленными координатами, среди которых имеется хотя бы одна, не лежащая на осях координат. Крабоеду необходимо найти количество отрезков, удовлетворяющих следующим условиям:
1) оба конца отрезка принадлежат заданному множеству;
2) ни один конец отрезка не лежит на осях координат;
3) отрезок пересекается с обеими осями координат.
Описание входных данных
В первой строке задаётся — количество точек в заданном множестве. Каждая из следующих строк содержит два целых числа и — координаты очередной точки. Гарантируется, что , .
Описание выходных данных
Необходимо вывести количество удовлетворяющих требованиям отрезков.
Пример входных данных:
-
- -
-
Пример выходных данных для приведённого выше примера входных данных:
2
Для того, чтобы отрезок, концы которого не лежат на осях координат пересекался и с , и с , необходимо, чтобы его концы лежали в противоположных четвертях. Тогда подсчитаем количество точек в каждой четверти, а затем перемножим их и сложим , где индексы при — номера четвертей.
f = open(’27A.txt’) k1, k2, k3, k4 = 0, 0, 0, 0 n = int(f.readline()) for i in range(n): x, y = map(int, f.readline().split()) if x > 0 and y > 0: k1 += 1 if x < 0 and y > 0: k2 += 1 if x < 0 and y < 0: k3 += 1 if x > 0 and y < 0: k4 += 1 print(k1*k3 + k2*k4)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Последовательность натуральных чисел характеризуется числом X, равным длине цепочки, сумма чисел которой максимальна и делится на . Найдите разность суммы и X. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Если существует несколько подпоследовательностей с равной максимальной суммой, нужно выбрать последовательность, которая заканчивается раньше, т.е. последний элемент имеет меньший индекс.
Цепочкой называется подпоследовательность символов, идущих подряд в исходной последовательности.
В ответ укажите числа для файла A и для файла B через пробел.
f = open(’27a.txt’) n = int(f.readline()) mins = [0] + [1000000000] * 20 ind = [-1] + [-100] * 20 maxim, summ = 0, 0 for i in range(n): x = int(f.readline()) summ += x ost = summ % 21 if summ - mins[ost] > maxim: maxim = summ - mins[ost] dlina = i - ind[ost] if summ < mins[ost]: mins[ost] = summ ind[ost] = i print(maxim - dlina)
Ошибка.
Попробуйте повторить позже
Дано число затем натуральных чисел. Рассматриваются все пары элементов последовательности, разность которых четна, и в этих парах, по крайней мере, одно из чисел делится на .
Среди всех таких пар найдите пару с максимальной суммой элементов и выведите элементы пары в порядке возрастания их числовых значений.
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее .
# первый элемент массивов -- чет # второй -- нечет kr17 = [0, 0] nekr = [0, 0] n = int(input()) ans = [0] for i in range(n): x = int(input()) if x % 17 == 0: if x + kr17[x % 2] > sum(ans): ans = [x, kr17[x % 2]] if x + nekr[x % 2] > sum(ans): ans = [x, nekr[x % 2]] kr17[x % 2] = max(kr17[x % 2], x) else: if x + kr17[x % 2] > sum(ans): ans = [x, kr17[x % 2]] nekr[x % 2] = max(nekr[x % 2], x) print(ans)
Ошибка.
Попробуйте повторить позже
Мальчик подошел к платной лестнице. Чтобы наступить на любую ступеньку, нужно заплатить указанную на ней сумму. Мальчик умеет перешагивать на следующую ступеньку, либо перепрыгивать через ступеньку. Требуется узнать, какая наименьшая сумма понадобится мальчику, чтобы добраться до верхней ступеньки.
Входные данные: В первой строке входного файла вводится одно число (натуральное число, не превышающее ) — количество ступенек. В следующей строке вводятся натуральных чисел, не превосходящих — стоимость каждой ступеньки (снизу вверх).
Выходные данные: Выведите одно число — наименьшую возможную стоимость прохода по лесенке.
Выведите ответ для следующих чисел:
Жадный алгоритм на каждом шагу принимает локальное оптимальное решение, не заботясь о том, что будет дальше. Разберём, почему в данной задаче жадный алгоритм не сработает. Изначально у него есть два варианта: сходить на ступеньку с числом или с числом — и пойдет на ступеньку с числом , т.к. это дешевле. Но правильное решение здесь — пойти на ступеньку с числом , потом мы сможем перепрыгнуть ступеньку с числом .
Решим задачку ручками: + = , а ступеньки с числами и мы перепрыгнули.
Ошибка.
Попробуйте повторить позже
Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя.
По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве при условии, что архив должен быть заполнен полностью.
Входные данные:
В первой строке входного файла находятся два числа: — размер свободного места на диске (натуральное число, не превышающее ) и — количество пользователей (натуральное число, не превышающее ). В следующих строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие ), каждое в отдельной строке.
Запишите в ответе максимальное количество файлов, которые удастся сохранить в архив.
Запишите ответ для следующих входных данных:
Обычный жадный алгоритм здесь не сработает, поскольку нам необходимо заполнить весь архив. Решим задачу ручками: число получится набрать, только если взять файлы размером и . Значит, всего удастся сохранить пользовательских файла.
Ошибка.
Попробуйте повторить позже
Андрей едет из пункта в пункт на автомобиле. Расстояние между этими пунктами равно километров. Известно, что с полным баком автомобиль способен проехать километров. Дана карта, на которой отмечены координаты бензоколонок, относительно пункта . Определите минимальное число заправок, которые придется сделать Андрею чтобы успешно достичь пункта . Известно, что при выезде из пункта бак был полон.
Входные данные
В первой строке вводятся числа и (натуральные, не превосходят ). В следующей строке вводится количество бензоколонок , потом следует натуральных чисел, не превосходящих — расстояния от пункта до каждой заправки. Заправки упорядочены по удаленности от пункта .
Выходные данные
Если при данных условиях пункта достичь невозможно, то вывести число . Если решение существует, то вывести минимальное количество остановок на дозаправку, которое нужно, чтобы достичь пункта .
f = open("input.txt") n, k = [int(i) for i in f.readline().split()] s = int(f.readline()) # список координат каждой заправки d = [int(i) for i in f.readlines()] # добавляем в список координат координату точки B # это нужно для того, чтобы мы могли проверить, # можно ли доехать с последней заправки до точки B без дозаправки или нет d.append(n) current_fuel = k # текущая наполненность бака current_dist = 0 # пройденное расстояние ans = 0 # ответ possible = True # флаг, указывающий то, смогли ли мы доехать до пункта B coords = [] for i in range(s+1): # проверка того, что мы не сможем проехать до следующей # заправки и нам нужно заправиться if d[i] - current_dist > current_fuel: # проверка того, что мы можем заправиться (в пункте A заправок нет) # и проверка того, что мы после заправки сможем доехать до следующей заправки if current_dist != 0 and k >= d[i] - current_dist: current_fuel = k - (d[i] - current_dist) ans += 1 coords.append(current_dist) else: possible = False break # если мы смогли доехать до следующей заправки без дозаправки, # то необходимо уменьшить кол-во топлива в баке else: current_fuel -= (d[i] - current_dist) current_dist = d[i] if possible: print(ans) else: print(-1)
Ошибка.
Попробуйте повторить позже
В этой задаче Вася готовится к олимпиаде. Учитель дал ему () задач для тренировки. Для каждой из этих задач известно, каким умением нужно обладать для её решения. Это означает, что если текущее умение Васи больше либо равно заданного умения для задачи, то он может ее решить. Кроме того, после решения -й задачи умение Васи увеличивается на число .
Исходное умение Васи равно . Решать данные учителем задачи он может в произвольном порядке. Какое максимальное количество задач он сможет решить, если выберет самый лучший порядок их решения?
Входные данные:
Сначала вводятся два целых числа , () — количество задач и исходное умение. Далее идут N пар целых чисел , () — соответственно сколько умения нужно для решения -й задачи и сколько умения прибавится после её решения.
Выходные данные:
Выведите одно число — максимальное количество задач, которое Вася может решить.
f = open("test.txt") n, a = [int(i) for i in f.readline().split()] tasks = [] for _ in range(n): x, y = [int(i) for i in f.readline().split()] tasks.append([x, -y]) tasks.sort() ans = 0 for i in range(n): x, y = tasks[i][0], -tasks[i][1] if x <= a: ans += 1 a += y print(ans)
Ошибка.
Попробуйте повторить позже
Системный администратор вспомнил, что давно не делал архива пользовательских файлов. Однако, объем диска, куда он может поместить архив, может быть меньше чем суммарный объем архивируемых файлов.
Известно, какой объем занимают файлы каждого пользователя.
Напишите программу, которая по заданной информации о пользователях и свободному объему на архивном диске определит максимальное число пользователей, чьи данные можно поместить в архив.
Входные данные
Сначала вводится число — размер свободного места на диске (натуральное, не превышает ), затем следует число — количество пользователей (натуральное, не превышает ), после этого идет чисел — объем данных каждого пользователя (натуральное, не превышает ).
Выходные данные
Выведите наибольшее количество пользователей, чьи данные могут быть помешены в архив.
f = open("task_1.txt") s, n = [int(x) for x in f.readline().split()] data = [int(x) for x in f.readlines()] data.sort() ans = 0 for i in range(len(data)): if s - data[i] >= 0: ans += 1 s -= data[i] else: break print(ans)
Ошибка.
Попробуйте повторить позже
Вам известны координаты начал и концов отрезков, расположенных на числовой прямой. Сколько существует непересекающихся промежутков, покрытых ровно одним отрезком из данных Вам?
Входные данные:
В первой строке входных данных содержится единственное число .
Далее в строках записано по два числа и , описывающие отрезки: начало и конец отрезка .
Выведите единственное число — количество непересекающихся промежутков, покрытых ровно одним отрезком.
Пример входных данных:
Пояснение к примеру:
Промежутки , и покрыты ровно одним отрезком. Ответ на данный пример — .
f = open("file.txt") n = int(f.readline()) segments = [] for i in range(n): a, b = map(int, f.readline().split()) segments.append((a, 0)) segments.append((b, 1)) segments.sort() ans = 0 cur = 0 for i in range(2 * n): a, b = segments[i] if (b == 0): cur += 1 else: cur -= 1 if (cur == 1): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Вам известны времена прихода и ухода каждого из посетителей ресторана. Какое максимальное количество человек посетило ресторан в какой-либо момент времени?
Входные данные:
Первая строка входных данных содержит единственное число .
Далее следуют строк, описывающие клиентов. Каждая строка содержит два числа и : времена прихода и ухода каждого клиента .
Гарантируется, что все времена захода и ухода различные.
Выведите одно число — максимальное число клиентов в какой-либо момент времени.
Пример входных данных:
Пояснение к примеру:
Например, в момент времени в ресторане присутствовали первый и третий клиент. Ответ на данный пример — .
f = open("file.txt") n = int(f.readline()) customer = [] for i in range(n): a, b = map(int, f.readline().split()) customer.append((a, 0)) customer.append((b, 1)) customer.sort() ans = 0 cur = 0 for i in range(2 * n): a, b = customer[i] if (b == 0): cur += 1 else: cur -= 1 ans = max(ans, cur) print(ans)
Ошибка.
Попробуйте повторить позже
На фестивале фильмов будет показано фильмов. Вам известно время начала и конца каждого фильма. Какое максимальное количество фильмов Вы можете посмотреть полностью?
Входные данные:
В первой строке входных данных записано число .
Далее заданы строк, описывающие фильмы. Каждая строка содержит два числа и : времена начала и конца фильма .
Выведите одно число: максимальное число фильмов, которые сможете посмотреть полностью.
Пример входных данных:
Пояснение к примеру:
Вы можете посмотреть первый и третий фильмы полностью. Ответ на данный тестовый пример — .
f = open("file.txt") n = int(f.readline()) movie = [] for i in range(n): a, b = map(int, f.readline().split()) movie.append((b, a)) movie.sort() ans, cur = 1, movie[0][0] for i in range(1, n): if (movie[i][1] >= cur): cur = movie[i][0] ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
На вход подается натуральное число затем натуральных чисел в порядке неубывания. Определите, сколько раз встречается число . В качестве ответа укажите количество чисел в последовательности.
def binary_search_recursive(arr, elem, start=0, end=None): if end is None: end = len(arr) - 1 if start > end: return False mid = (start + end) // 2 if elem == arr[mid]: return mid if elem < arr[mid]: return binary_search_recursive(arr, elem, start, mid-1) return binary_search_recursive(arr, elem, mid+1, end) def count_nums(arr, x): ind = binary_search_recursive(arr, x) if ind == -1: return 0 count = 1 left = ind - 1 while left >= 0 and arr[left] == x: count += 1 left -= 1 right = ind + 1 while right < len(arr) and arr[right] == x: count += 1 right += 1 return count f = open(’test.txt’) n = int(f.readline()) a = [int(f.readline()) for i in range(n)] print(count_nums(a, 722))
Ошибка.
Попробуйте повторить позже
На вход подается натуральное число затем натуральных чисел в порядке неубывания. Определите, на каком месте впервые встречается число . В качестве ответа укажите индекс данного числа в массиве, индексация начинается с .
def binary_search_recursive(arr, elem, start=0, end=None): if end is None: end = len(arr) - 1 if start > end: return False mid = (start + end) // 2 if elem <= arr[mid]: return binary_search_recursive(arr, elem, start, mid-1) if elem == arr[mid + 1]: return mid + 1 return binary_search_recursive(arr, elem, mid+1, end) f = open(’test.txt’) n = int(f.readline()) a = [int(f.readline()) for i in range(n)] print(binary_search_recursive(a, 34))