08 Макс/мин, кол-во пар, сумма/разность/произведение кратно/не кратно на расстоянии
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Космическая станция в течение N минут (N – целое число) ежеминутно снимает показания прибора, который измеряет количество пролетевших рядом метеоритов в условных единицах за минуту, предшествующую снятию показаний. Контрольным значением серии показаний называется сумма пары значений, каждое из которых является максимальным, если сравнивать его значение со всеми показаниями до него. Необходимо найти максимальное контрольное значение, при этом между показаниями должно пройти не более 8 минут.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N ().В каждой из следующих N строк записано количество осадков –
неотрицательное целое число, не превышающее 10 000 000. Числа указаны в порядке снятия показаний прибора,
начиная с первой минуты.
Пример входного файла:
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомой суммы должно быть число 20. В ответе укажите два числа через пробел: сначала максимальную сумму для файла А, затем для файла B.
# Пункт А f = open(’6_A__2qcvo.txt’) n = int(f.readline()) a = [int(i) for i in f] mx = -10 ** 20 for i in range(len(a) - 1): for j in range(i + 1, len(a)): # Проверяем, что разница между показаниями не больше 8 минут, и # первое и второе числа из пары являются максимальными по сравнению # со всеми предыдущими числами в последовательности if j - i <= 8 and (a[i] == max(a[:i + 1])) and (a[j] == max(a[:j + 1])): mx = max(mx, a[i] + a[j]) # обновляем максимальную сумму, если требуется print(mx) f = open(’6_B__2qcvp.txt’) n = f.readline() a = [int(i) for i in f] # Первое число последовательности больше - первый # подходящий максимум mx = a[0] # Индекс предыдущего максимума mx_ind = 0 mx_sum = 0 for i in range(1, len(a)): x = a[i] # Если x больше предыдущего максимума - # он больше всех предыдущих чисел if x >= mx: # Если расстояние до предыдущего максимума не # превышает 8 - эти два максимума можно объединить # в сумму if i - mx_ind <= 8: mx_sum = x + mx # Обновление последнего максимума и его индекса mx = x mx_ind = i print(mx_sum)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не больше чем 3 (разница в индексах элементов пары должна быть 3 или менее, порядок элементов в паре неважен). Необходимо определить максимальную сумму пары, для которой сумма элементов не делится на 2.
В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: максимальную сумму элементов, находящихся в последовательности на расстоянии не более чем 3, сумма элементов которой не кратна 2.
Пример входного файла:
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомой суммы должно быть число 21.
В ответе укажите два числа через пробел: сначала максимальную сумму для файла А, затем для файла B.
#Пункт А f = open(’7_A.txt’) n = int(f.readline()) a = [int(i) for i in f] mx = -10**20 for i in range(len(a)-1): for j in range(i+1,len(a)-1): if j - i <= 3 and (a[i]+a[j]) % 2 != 0: mx = max(mx,a[i]+a[j]) print(mx) #Пункт B f = open(’7_B.txt’) n = int(f.readline()) a = [] #Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию mx = -10**20 for i in range(n): x = int(f.readline()) #Считываем число из файла for y in a: #Проходимся по списку чисел if (x + y) % 2 != 0: #Проверяем на максимум, если нашлась такая пара,сумма которой не кратна 2 mx = max(mx,x+y) a += [x] #Добавляем в список текущее число if len(a) > 3: #Если в списке больше трех чисел,то удаляем тот,что добавили раньше всего a.pop(0) print(mx)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора количество пар, сумма которых кратна 15, между моментами которых прошло не более 6 минут.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
Пример входного файла:
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомого количества пар должно быть число 4.
В ответе укажите два числа через пробел: сначала количество пар для файла А, затем для файла B.
#Пункт А f = open(’8_A.txt’) n = int(f.readline()) a = [int(i) for i in f] k = 0 for i in range(len(a)-1): for j in range(i+1,len(a)): if j - i <= 6 and (a[i]+a[j]) % 15 == 0: k += 1 print(k) #Пункт B f = open(’8_B.txt’) n = int(f.readline()) a = [] #Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию k = 0 for i in range(n): x = int(f.readline()) #Считываем число из файла for y in a: #Проходимся по списку чисел if (x+y) % 15 == 0: #Если сумма чисел кратна 15-ти, то прибавляем к счетчику 1 k += 1 a += [x] #Добавляем в список текущее число if len(a) > 6: #Если в списке больше 6-ти чисел,то удаляем тот,что добавили раньше всего a.pop(0) print(k)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не больше чем 47 (разница в индексах элементов пары должна быть 47 или менее, порядок элементов в паре неважен). Необходимо определить максимальную сумму пары, которая оканчивается на 69.
В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: максимальную сумму двух элементов, находящихся в последовательности на расстоянии не более чем 47, сумма элементов которой оканчивается на 69.
Пример входного файла:
17
1323
54
5
434
81
32
9
242
12
70
14
121
312
27
5
3
17
Для указанных входных данных значением искомой суммы должно быть число 269.
В ответе укажите два числа через пробел: сначала максимальную сумму для файла А, затем для файла B.
#Пункт А f = open(’9_A.txt’) n = int(f.readline()) a = [int(i) for i in f] mx = -10**20 for i in range(len(a)-1): for j in range(i+1,len(a)): if j - i <= 47 and (a[i]+a[j]) % 100 == 69: mx = max(mx,a[i]+a[j]) print(mx) #Пункт B f = open(’9_B.txt’) n = int(f.readline()) a = [] #Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию mx = -10**20 for i in range(n): x = int(f.readline()) #Считываем число из файла for y in a: #Проходимся по списку чисел if (x+y) % 100 == 69: #Проверяем на максимум, если нашлась такая пара, сумма которой оканчивается на 69 mx = max(mx,x+y) a += [x] #Добавляем в список текущее число if len(a) > 47: #Если в списке больше 47-ми чисел,то удаляем тот,что добавили раньше всего a.pop(0) print(mx)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не больше чем 6 (разница в индексах элементов пары должна быть 6 или менее, порядок элементов в паре неважен). Необходимо определить минимальную сумму пары, не кратную 16.
В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: минимальную сумму элементов, находящихся в последовательности на расстоянии не более чем 6, сумма элементов которой не кратна 16.
Пример входного файла:
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомой суммы должно быть число 5.
В ответе укажите два числа через пробел: сначала минимальную сумму для файла А, затем для файла B.
#Пункт А f = open(’10_A.txt’) n = int(f.readline()) a = [int(i) for i in f] mn = 10**20 for i in range(len(a)-1): for j in range(i+1,len(a)): if j - i <= 6 and (a[i]+a[j]) % 16 != 0: mn = min(mn,a[i]+a[j]) print(mn) #Пункт B f = open(’10_B.txt’) n = int(f.readline()) a = [] #Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию mn = 10**20 for i in range(n): x = int(f.readline()) #Считываем число из файла for y in a: #Проходимся по списку чисел if (x+y) % 16 != 0: mn = min(mn,x+y) #Проверяем на минимум, если нашлась такая пара,сумма которой не кратна 16 a += [x] #Добавляем в список текущее число if len(a) > 6: #Если в списке больше 6-ти чисел,то удаляем тот,что добавили раньше всего a.pop(0) print(mn)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых чисел – показания прибора. В течение минут (
–
натуральное число) прибор ежеминутно регистрирует значение напряжения (в условных единицах) в электрическойй
сети и передает его на сервер.
Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не
менее мин, а сумма этих трех чисел была минимально возможной. Запишите в ответе найденную
сумму.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит количество
переданных показаний
. В каждой из следующих
строк находится одно целое
число, по модулю не превышающее 10.000.000, которое обозначает значение напряжения в соответствующую
минуту.
Запишите в ответе два числа через пробел: сначала значение искомой величины для файла A, затем для файла B.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] mn = 10 ** 10 s = 5 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): for k in range(j + 1, n): if j - i >= s and k - j >= s: mn = min(mn, a[i] + a[j] + a[k]) print(mn)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 10 ** 10 s = 5 # Расстояние между элементами # минимальное найденное на данный момент число mn_one = 10 ** 10 # минимальная сумма первых двух чисел mn_two = 10 ** 10 for i in range(2 * s, n): # Обновляем первое минимальное число mn_one = min(mn_one, a[i - 2 * s]) # Обновляем второе минимальную сумму двух чисел mn_two = min(mn_two, mn_one + a[i - s]) # Обновляем ответ ans = min(ans, a[i] + mn_two) print(ans)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с
интервалом в 1 мин в течение минут (
– целое число). Прибор измеряет количество атмосферных осадков,
полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных
единицах измерения.
Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее мин, а
их сумма была максимально возможной и при этом не кратной 3. Укажите найденное суммарное количество
осадков.
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит количество
переданных показаний
. В каждой из следующих
строк находится одно целое
неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую
минуту.
Запишите в ответе два числа через пробел: сначала значение искомой величины для файла A, затем для файла B.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 k = 3 # Чему не должна быть кратна сумма s = 10 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k != 0 and j - i >= s: ans = max(ans, a[i] + a[j]) print(ans)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 k = 3 # Чему не должна быть кратна сумма s = 10 # Расстояние между элементами # Список максимальных чисел с определенными остатками от деления на k # Например, под индексом 2 хранится максимальное число с остатком 2 nums = [-10 ** 10] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Обновляем максимум по остатку nums[ost1] = max(nums[ost1], a[i - s]) # Считаем остаток, который должен быть у числа, # которое нельзя поставить в пару с текущим ost2 = (k - (a[i] % k)) % k for j in range(k): # Если сумма не будет кратна k if j != ost2: # Обновляем ответ, если он больше предыдущего ans = max(ans, a[i] + nums[j]) print(ans)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с
интервалом в 1 мин в течение минут (
– целое число). Прибор измеряет количество атмосферных осадков,
полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных
единицах измерения.
Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее мин, а их
сумма была минимально возможной. Укажите найденное суммарное количество осадков.
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит количество
переданных показаний
. В каждой из следующих
строк находится одно целое
неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую
минуту.
Запишите в ответе два числа через пробел: сначала значение искомой величины для файла А, затем – для файла В.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] mn = 10 ** 10 s = 9 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if j - i >= s: mn = min(mn, a[i] + a[j]) print(mn)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 10 ** 10 s = 9 # Расстояние между элементами # Минимальное найденное на данный момент число mn_prev = 10 ** 10 for i in range(s, n): # Обновляем минимальное число mn_prev = min(mn_prev, a[i - s]) # Обновляем ответ ans = min(ans, a[i] + mn_prev) print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности.
Необходимо определить количество пар элементов этого набора, в которых , а сумма делится на
134.
В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 10000.
В ответе укажите два числа через пробел: сначала значение искомого количества для файла , затем для файла
.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 134 # Чему должна быть кратна сумма s = 8 + 1 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and j - i >= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 134 # Чему должна быть кратна сумма s = 8 + 1 # Расстояние между элементами # Список количеств чисел с определенными остатками от деления на k # Например, под индексом 3 хранится кол-во чисел с остатком 3 nums = [0] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Увеличиваем кол-во чисел с найденным остатком nums[ost1] += 1 # Считаем остаток, который должен быть у числа, # которое можно поставить в пару с текущим ost2 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество образованных пар cnt += nums[ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора количество пар, сумма которых кратна 148, между моментами которых прошло не более 10 минут. Если получить такую сумму не удается, ответ считается равным -1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
В ответе укажите два числа через пробел: сначала количество пар для файла A, затем для файла B.
#Пункт А f = open(’10_A.txt’) n = int(f.readline()) a = [int(i) for i in f] k = 0 for i in range(len(a)-1): for j in range(i+1,len(a)): if j - i <= 10: if (a[i]+a[j]) % 148 == 0: k += 1 print(k) #Пункт B f = open(’10_B.txt’) n = int(f.readline()) a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию D = 148 k = 0 for i in range(n): x = int(f.readline())#Считываем число из файла for d in a:#Проходимся по списку чисел if (x+d) % D == 0: k += 1#Увеличиваем счётчик если нашлась такая пара,сумма которой будет кратна 14 a += [x]#Добавляем в список текущее число if len(a) > 10:#Если в списке больше 10-ти чисел,то удаляем тот,что добавили раньше всего a.pop(0) print(k)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются тройки различных элементов последовательности, в которых между любыми двумя элементами расстояние не менее 18 (расстояние – разность порядковых номеров). Необходимо определить количество троек последовательности, сумма которых кратна 3560.
Входные данные: Даны два входных файла: файл A (27-A_1.txt) и файл В (27-B_1.txt), каждый из которых
содержит в первой строке количество целых положительных чисел . Каждая из следующих N строк
содержит одно натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 k = 3560 # Чему должна быть кратна сумма s = 18 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): for r in range(j + 1, n): if j - i >= s and r - j >= s and (a[i] + a[j] + a[r]) % k == 0: ans += 1 print(ans)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 k = 3560 # Чему должна быть кратна сумма s = 18 # Расстояние между элементами # Список количеств чисел с определенными остатками от деления на k # Например, под индексом 3 хранится кол-во чисел с остатком 3 nums = [0] * k # Список из количеств пар, чья сумма имеет определенный остаток от деления на k v = [0] * k for i in range(s * 2, len(a)): # Обрабатываем элемент на расстоянии 2*s от текущего ost1 = a[i - s * 2] % k # Увеличиваем кол-во найденных элементов с таким остатком nums[ost1] += 1 # Обрабатываем средний элемент - на расстоянии d от текущего ost2 = a[i - s] % k # Для каждого остатка создаём новые суммы с новым средним элементом # и увеличиваем количества пар с получившимися новыми остатками for j in range(k): v[(ost2 + j) % k] += nums[j] # Вычисляем остаток для пары в сумму к нашему числу ost3 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество образованных троек ans += v[ost3] print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов
этого набора, в которых
и сумма элементов кратна 1319.
Входные данные: Даны два входных файла: файл A (27-A_2.txt) и файл В (27-B_2.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 1319 # Чему должна быть кратна сумма s = 9 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and j - i >= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 1319 # Чему должна быть кратна сумма s = 9 # Расстояние между элементами # Список количеств чисел с определенными остатками от деления на k # Например, под индексом 3 хранится кол-во чисел с остатком 3 nums = [0] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Увеличиваем кол-во чисел с найденным остатком nums[ost1] += 1 # Считаем остаток, который должен быть у числа, # которое можно поставить в пару с текущим ost2 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество образованных пар cnt += nums[ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не менее чем 10, произведение которых четно, а разность кратна 980.
Входные данные: Даны два входных файла: файл A (27-A_3.txt) и файл В (27-B_3.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 980 # Чему должна быть кратна сумма s = 10 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] - a[j]) % k == 0 and j - i >= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 980 # Чему должна быть кратна сумма s = 10 # Расстояние между элементами # Список с количествами чисел, удовлетворяющих определенным условием # Индексы числа nums[x][y] обозначают следующее: # x - делится ли число на 2 (1 - да, 0 - нет) # y - остаток от деления числа на k nums = [[0] * k for _ in range(2)] for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Увеличиваем кол-во чисел с найденным остатком nums[int(a[i - s] % 2 == 0)][ost1] += 1 # Считаем остаток, который должен быть у числа, # которое можно поставить в пару с текущим ost2 = a[i] % k # Увеличиваем ответ на количество образованных пар с четными числами cnt += nums[1][ost2] # Если a[i] четное, его можно поставить в пару к нечетным if a[i] % 2 == 0: cnt += nums[0][ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не более чем 12, сумма которых кратна 318 и хотя бы одно из чисел нечетно.
Входные данные: Даны два входных файла: файл A (27-A_4.txt) и файл В (27-B_4.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 318 # Чему должна быть кратна сумма s = 12 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and j - i <= s and (a[i] % 2 != 0 or a[j] % 2 != 0): cnt += 1 print(cnt)
Эффективное решение:
f = open(’27B_4.txt’) n = int(f.readline()) mas = [] count = 0 for i in range(n): a1 = int(f.readline()) # Составляем с текущим числом пары со всеми числами на нужном расстоянии for a2 in mas: if (a1+a2) % 318 == 0 and (a1 % 2 != 0 or a2 % 2 != 0): count += 1 # Добавляем текущее число в список mas += [a1] # Удаляем то число, которое вышло за допустимое расстояние if len(mas) > 12: mas.pop(0) print(count)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не более чем 19, разность которых кратна 897 и элементы пары имеют одинаковую четность.
Входные данные: Даны два входных файла: файл A (27-A_5.txt) и файл В (27-B_5.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 897 # Чему должна быть кратна сумма s = 19 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] - a[j]) % k == 0 and j - i <= s and (a[i] % 2 == a[j] % 2): cnt += 1 print(cnt)
Эффективное решение:
f = open(’27B_5.txt’) n = int(f.readline()) mas = [] count = 0 for i in range(n): a1 = int(f.readline()) # Проверяем все пары чисел с текущим на нужном расстоянии for a2 in mas: if (abs(a1-a2)) % 897 == 0 and a1 % 2 == a2 % 2: count += 1 # Добавляем текущее число в список mas += [a1] # Удаляем из списка число, вышедшее за допустимое расстояние if len(mas) > 19: mas.pop(0) print(count)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не более чем 15, сумма которых кратна 474, а сумма единиц – четна.
Входные данные: Даны два входных файла: файл A (27-A_6.txt) и файл В (27-B_6.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно целое
число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 474 # Чему должна быть кратна сумма s = 15 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and j - i <= s and (abs(a[i] % 10) + abs(a[j] % 10)) % 2 == 0: cnt += 1 print(cnt)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) mas = [] count = 0 for i in range(n): a1 = int(f.readline()) # Проверяем все пары чисел с текущим на нужном расстоянии for a2 in mas: if a1+a2 % 474 == 0 and (abs(a1 % 10) + abs(a2 % 10)) % 2 == 0: count += 1 # Добавляем текущее число в список mas += [a1] # Удаляем из списка число, вышедшее за допустимое расстояние if len(mas) > 15: mas.pop(0) print(count)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются тройки различных элементов последовательности, в которых между любыми двумя элементами расстояние не менее 20 (расстояние – разность порядковых номеров). Необходимо определить количество троек последовательности, сумма которых кратна 5432.
Входные данные: Даны два входных файла: файл A (27-A_7.txt) и файл В (27-B_7.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 k = 5432 # Чему должна быть кратна сумма s = 20 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): for r in range(j + 1, n): if j - i >= s and r - j >= s and (a[i] + a[j] + a[r]) % k == 0: ans += 1 print(ans)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 k = 5432 # Чему должна быть кратна сумма s = 20 # Расстояние между элементами # Список количеств чисел с определенными остатками от деления на k # Например, под индексом 3 хранится кол-во чисел с остатком 3 nums = [0] * k # Список из количеств пар, чья сумма имеет определенный остаток от деления на k v = [0] * k for i in range(s * 2, len(a)): # Обрабатываем элемент на расстоянии 2*s от текущего ost1 = a[i - s * 2] % k # Увеличиваем кол-во найденных элементов с таким остатком nums[ost1] += 1 # Обрабатываем средний элемент - на расстоянии d от текущего ost2 = a[i - s] % k # Для каждого остатка создаём новые суммы с новым средним элементом # и увеличиваем количества пар с получившимися новыми остатками for j in range(k): v[(ost2 + j) % k] += nums[j] # Вычисляем остаток для пары в сумму к нашему числу ost3 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество образованных троек ans += v[ost3] print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов
этого набора, в которых
и сумма элементов кратна 4879.
Входные данные: Даны два входных файла: файл A (27-A_8.txt) и файл В (27-B_8.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 4879 # Чему должна быть кратна сумма s = 17 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and j - i >= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’B.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 4879 # Чему должна быть кратна сумма s = 17 # Расстояние между элементами # Список количеств чисел с определенными остатками от деления на k # Например, под индексом 3 хранится кол-во чисел с остатком 3 nums = [0] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Увеличиваем кол-во чисел с найденным остатком nums[ost1] += 1 # Считаем остаток, который должен быть у числа, # которое можно поставить в пару с текущим ost2 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество образованных пар cnt += nums[ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не более чем 23, сумма которых кратна 4318, а произведение остатков от деления чисел на 5 – кратно трем.
Входные данные: Даны два входных файла: файл A (27-A_9.txt) и файл В (27-B_9.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 4318 # Чему должна быть кратна сумма s = 23 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and ((a[i] % 5) * (a[j] % 5)) % 3 == 0 and j - i <= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’27B_9.txt’) n = int(f.readline()) mas = [] count = 0 for i in range(n): a1 = int(f.readline()) # Ставим текущее число в пару ко всем числам на подходящем расстоянии for a2 in mas: if (a1+a2) % 4318 == 0 and ((a1 % 5) * (a2 % 5)) % 3 == 0: count += 1 # Добавляем текущее число в список mas += [a1] # Удаляем из списка число, вышедшее за допустимое расстояние if len(mas) > 23: mas.pop(0) print(count)
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, находящихся на расстоянии не более чем 11, в которых сумма элементов кратна 2150 либо сумма квадратов элементов кратна 1300.
Входные данные: Даны два входных файла: файл A (27-A_10.txt) и файл В (27-B_10.txt), каждый из которых
содержит в первой строке количество пар N . Каждая из следующих N строк содержит одно
натуральное число.
Переборное решение:
f = open(’A.txt’) n = int(f.readline()) a = [int(i) for i in f] cnt = 0 k = 4318 # Чему должна быть кратна сумма s = 23 # Расстояние между элементами for i in range(n): for j in range(i + 1, n): if (a[i] + a[j]) % k == 0 and ((a[i] % 5) * (a[j] % 5)) % 3 == 0 and j - i <= s: cnt += 1 print(cnt)
Эффективное решение:
f = open(’27B_10.txt’) n = int(f.readline()) mas = [] count = 0 for i in range(n): a1 = int(f.readline()) # Ставим текущее число в пару ко всем числам на подходящем расстоянии for a2 in mas: if (a1+a2) % 2150 == 0 or (a1**2 + a2**2) % 1300 == 0: count += 1 # Добавляем текущее число в список mas += [a1] # Удаляем из списка число, вышедшее за допустимое расстояние if len(mas) > 11: mas.pop(0) print(count)