03 Цепочки, выбор последовательности, префиксные суммы
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность
натуральных чисел. Найдите непрерывную
последовательность, внутри которой сумма элементов на нечетных позициях равна сумме элементов на четных позициях. В
качестве ответа выведите сумму данной последовательности. Если их несколько, то в качестве ответа укажите наибольшую
из сумм.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала значение для файла , затем для файла
.
f = open("27B.txt") n = int(f.readline()) min_ps = [10 ** 100] * 100000000 # Максимальные суммы с различными разностями между sn и sc (префиксы) sc = sn = mx = 0 # Сумма чисел на чётных позициях / Сумма чисел на нечётных позициях / Макс. сумма for i in range(n): x = int(f.readline()) sc += x * (i % 2 == 0) # Прибавляем новое число из файла, если оно на чётной позиции sn += x * (i % 2 != 0) # Прибавляем новое число из файла, если оно на нечётной позиции s = sn + sc # Общая сумма всех чисел p = sn - sc # Разность между суммами на чётных и нечётных позициях mx = max(mx, s - min_ps[p]) # Записываем максимальную сумму, вычитая нужный префикс min_ps[p] = min(min_ps[p], s) # После всех проверок записываем текущую сумму как префикс print(mx) # Выводим ответ
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность
натуральных чисел. Найдите непрерывную
последовательность с максимальной суммой, в которой количество нечетных элементов кратно
. В качестве ответа
выведите сумму данной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
10000.
В ответе укажите два числа: сначала значение для файла , затем для файла
.
f = open(’27B_2__1natt.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности s = 0 # сумма всех чисел файла count = 0 # количество нечётных чисел всего файла K = 10 # чему должно быть кратно количество нечётных чисел tails = [10**30]*K # список, в котором под каждым индексом будут записаны минимальные префиксные суммы. # определенный индекс обозначает остаток при делении на 3. # Например, tails[2] - это префиксная сумма, у которой количество нечётных чисел даёт остаток 2 при делении на 10 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if x % 2 != 0: # если текущее число - нечётное count += 1 # увеличиваем счётчик if count % K == 0: # если счётчик кратен 10 mx = max(mx,s) # перезаписываем максимум # если в сумме s количество нечётных чисел не кратно 10 # тогда убавляем такую префиксную сумму, # после которой в полученной подпоследовательности количество нечётных чисел будет кратно 10 s1 = s - tails[count % K] mx = max(mx,s1) # перезаписываем максимум # перезаписываем префиксные суммы под определенным остатком при делении на 10 tails[count % K] = min(tails[count % K], s) print(mx)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 37. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
18
10
9
19
14
23
95
В этом наборе можно выбрать последовательности 18+10+9 (сумма 37) и 14+23 (сумма 37). Самая короткая из них, 14 + 23, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’1_B__1vuv9.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 37 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 37 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 37 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 37 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 37 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 37, # то убавляем префиксную сумму с остатком при делении на 37 равным остатку при делении на 37 у суммы s # тогда мы получим новую сумму s1, которая кратна 37 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 37 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 74. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
34
27
13
19
23
51
95
В этом наборе можно выбрать последовательности 34+27+13 (сумма 74) и 23+51 (сумма 74). Самая короткая из них, 23+51, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’1_B__1vuv9.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 74 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 74 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 74 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 74 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 74 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 74, # то убавляем префиксную сумму с остатком при делении на 74 равным остатку при делении на 74 у суммы s # тогда мы получим новую сумму s1, которая кратна 74 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 74 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 57. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
24
20
13
19
23
34
92
В этом наборе можно выбрать последовательности 24+20+13 (сумма 57) и 23+34 (сумма 57). Самая короткая из них, 23+34, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’3_B__1vuve.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 57 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 57 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 57 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 57 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 57 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 57, # то убавляем префиксную сумму с остатком при делении на 57 равным остатку при делении на 57 у суммы s # тогда мы получим новую сумму s1, которая кратна 57 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 57 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 67. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла: 7
34
20
13
19
23
44
95
В этом наборе можно выбрать последовательности 34+20+13 (сумма 67) и 23+44 (сумма 67). Самая короткая из них, 23+44, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’4_B__1vuvh.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 67 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 67 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 67 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 67 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 67 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 67, # то убавляем префиксную сумму с остатком при делении на 67 равным остатку при делении на 67 у суммы s # тогда мы получим новую сумму s1, которая кратна 67 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 67 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 317. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
104
127
86
119
166
151
195
В этом наборе можно выбрать последовательности 104+127+86 (сумма 317) и 166+151 (сумма 317). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
with open(’5_B.txt’) as f: n = int(f.readline()) k = [float(’inf’)]*317 l = [0]*317 s = 0 m = 0 minLen = float(’inf’) for i in range(n): x = int(f.readline()) s += x if s % 317 == 0: if s > m: m = s minLen = i + 1 ost = s % 317 if k[ost] != float(’inf’): if (s-k[ost]) > m or (s-k[ost] == m and i - l[ost] + 1 < minLen): m = s - k[ost] minLen = i-l[ost] + 1 if k[ost] == float(’inf’): k[ost] = s l[ost] = i + 1 if s < k[ost]: k[ost] = s l[ost] = i + 1 print(minLen)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 413. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
123
193
97
119
162
251
195
В этом наборе можно выбрать последовательности 123+193+97 (сумма 413) и 162+251 (сумма 413). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’6_B__1vuvp.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 413 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 413 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 413 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 413 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 413 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 413, # то убавляем префиксную сумму с остатком при делении на 413 равным остатку при делении на 413 у суммы s # тогда мы получим новую сумму s1, которая кратна 413 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 413 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 111. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
42
37
32
119
66
45
95
В этом наборе можно выбрать последовательности 42+37+32 (сумма 111) и 66+45 (сумма 111). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’7_B__1vuvs.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 111 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 111 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 111 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 111 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 111 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 111, # то убавляем префиксную сумму с остатком при делении на 111 равным остатку при делении на 111 у суммы s # тогда мы получим новую сумму s1, которая кратна 111 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 111 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 185. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
52
57
76
119
97
88
95
В этом наборе можно выбрать последовательности 52+57+76 (сумма 185) и 97+88 (сумма 185). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’8_B__1vuvw.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 185 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 185 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 185 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 185 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 185 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 185, # то убавляем префиксную сумму с остатком при делении на 185 равным остатку при делении на 185 у суммы s # тогда мы получим новую сумму s1, которая кратна 185 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 185 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 1007. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
652
257
98
419
219
788
595
В этом наборе можно выбрать последовательности 652+257+98 (сумма 1007) и 219+788 (сумма 1007). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’9_B__1vuvy.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 1007 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 1007 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 1007 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 1007 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 1007 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 1007, # то убавляем префиксную сумму с остатком при делении на 1007 равным остатку при делении на 1007 у суммы s # тогда мы получим новую сумму s1, которая кратна 1007 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 1007 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 1999. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
752
657
590
419
897
1102
495
В этом наборе можно выбрать последовательности 752+657+590 (сумма 1999) и 897+1102 (сумма 1999). Самая короткая из них имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’10_B__1vuw1.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 1999 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 1999 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 1999 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 1999 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 1999 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 1999, # то убавляем префиксную сумму с остатком при делении на 1999 равным остатку при делении на 1999 у суммы s # тогда мы получим новую сумму s1, которая кратна 1999 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 1999 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 31. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N
. Каждая из следующих N строк содержит одно натуральное число, не превышающее 10
000.
Пример организации исходных данных во входном файле:
7
1
3
4
93
8
5
95
В ответе укажите два числа через пробел: сначала значение искомой длины для файла A, затем – для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
with open(’1.txt’) as f: n = int(f.readline()) k = [float(’inf’)]*31 l = [0]*31 s = 0 m = 0 minLen = float(’inf’) for i in range(n): x = int(f.readline()) s += x if s % 31 == 0: if s > m: m = s minLen = i + 1 ost = s % 31 if k[ost] != float(’inf’): if (s-k[ost]) > m or (s-k[ost] == m and i - l[ost] + 1 < minLen): m = s - k[ost] minLen = i-l[ost] + 1 if k[ost] == float(’inf’): k[ost] = s l[ost] = i + 1 if s < k[ost]: k[ost] = s l[ost] = i + 1 print(minLen)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 102. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
120
84
33
157
46
1
95
В этом наборе можно выбрать последовательности 120+84 (сумма 204) и 157+46+1 (сумма 204). Самая короткая из них, 120+84, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’1B__3f33y.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 102 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 102 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 102 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 102 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 102 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 102, # то убавляем префиксную сумму с остатком при делении на 102 равным остатку при делении на 102 у суммы s # тогда мы получим новую сумму s1, которая кратна 102 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 102 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 66. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
66
60
72
10
100
98
95
В этом наборе можно выбрать последовательности 66+60+72 (сумма 198) и 100+98 (сумма 198). Самая короткая из них, 100+98, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’2B__3f34m.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 66 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 66 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 66 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 66 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 66 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 66, # то убавляем префиксную сумму с остатком при делении на 66 равным остатку при делении на 66 у суммы s # тогда мы получим новую сумму s1, которая кратна 66 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 66 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 80. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
34
27
19
11
29
51
95
В этом наборе можно выбрать последовательности 34+27+19 (сумма 80) и 29+51 (сумма 80). Самая короткая из них, 29+51, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.
f = open(’3B__3f35a.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 80 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 80 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 80 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 80 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 80 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 80, # то убавляем префиксную сумму с остатком при делении на 80 равным остатку при делении на 80 у суммы s # тогда мы получим новую сумму s1, которая кратна 80 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 80 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 138. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
34
27
58
11
101
37
95
В этом наборе можно выбрать последовательности 34+27+58 (сумма 138) и 101+37 (сумма 138). Самая короткая из них, 101+37, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’4B__3f35r.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 138 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 138 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 138 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 138 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 138 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 138, # то убавляем префиксную сумму с остатком при делении на 138 равным остатку при делении на 138 у суммы s # тогда мы получим новую сумму s1, которая кратна 138 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 138 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 97. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит натуральное число, не превышающее 10
000.
пример входного файла:
7
44
11
42
11
34
63
95
В этом наборе можно выбрать последовательности 44+11+42 (сумма 97) и 34+63 (сумма 97). Самая короткая из них, 34+63, имеет длину 2. Ответ: 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’5B__3f36d.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 97 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 97 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 97 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 97 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 97 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 97, # то убавляем префиксную сумму с остатком при делении на 97 равным остатку при делении на 97 у суммы s # тогда мы получим новую сумму s1, которая кратна 97 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 97 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие, что сумма элементов каждой из них кратна k = 375. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой длинной из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N . Каждая из следующих N строк содержит натуральное число, не превышающее
.
Пример входного файла:
7
58
495
217
674
609
193
375
В этом наборе можно выбрать числа 217, 674 и 609, которые в сумме образуют число 1500, кратное 375. А также последнее число 375. Ответом для данного примера будет число 3.
В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.
f = open(’27B_04_1__3kndh.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 375 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 375 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 375 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 375 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 375 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 375, # то убавляем префиксную сумму с остатком при делении на 375 равным остатку при делении на 375 у суммы s # тогда мы получим новую сумму s1, которая кратна 375 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина больше if s1 > mx or (s1 == mx and ln1 > ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 375 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Дана последовательность из N целых чисел. Рассматриваются все её непрерывные подпоследовательности, такие, что сумма элементов каждой из них кратна k = 27. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N . Каждая из следующих N строк содержит целое число, по модулю не превышающее
.
Пример входного файла:
7
35
10
-18
-22
-22
49
-43
В этом наборе можно выбрать числа 35, 10 и -18, которые в сумме образуют число 27. А также числа -22 и 49, тоже в сумме образующие число 27. Ответом для данного примера будет число 2.
В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.
f = open(’27B_04_2__3knet.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 27 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 27 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 27 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 27 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s > mx: # если сумма кратна 27 и больше максимума mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 27, # то убавляем префиксную сумму с остатком при делении на 27 равным остатку при делении на 27 у суммы s # тогда мы получим новую сумму s1, которая кратна 27 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 больше максимума или сумма s1 равна максимуму и при этом её длина меньше if s1 > mx or (s1 == mx and ln1 < ln): mx = s1 # перезаписываем максимум ln = ln1 # перезаписываем длину # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 27 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)