03 Цепочки, выбор последовательности, префиксные суммы
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на
. Найдите
. Гарантируется, что хотя бы одна такая сумма в последовательности есть.
Цепочкой называется подпоследовательность символов, идущих подряд в исходной последовательности. Первое число в
файле - это количество чисел.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
Решение 1 (неэффективное)
f = open("27A.txt") n = int(f.readline()) a = [int(f.readline()) for x in range(n)] ans, mx_sum = 0, 0 for i in range(n): sum = 0 for j in range(i, n): sum += a[j] if (sum % 16 == 0) and (sum > mx_sum): mx_sum = sum ans = j - i + 1 print(ans)
Решение 2 (эффективное)
f = open(’27B__tckn.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 16 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 16 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 16 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 16 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 16 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 16, # то убавляем префиксную сумму с остатком при делении на 16 равным остатку при делении на 16 у суммы s # тогда мы получим новую сумму s1, которая кратна 16 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 с таким же остатком при делении на 16 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом X, равным длине цепочки, сумма чисел которой минимальна и делится на 17. Найдите разность суммы и X. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Цепочкой называется подпоследовательность символов, идущих подряд в исходной последовательности.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Решение 1 (неэффективное)
f = open("27A.txt") n = int(f.readline()) a = [int(f.readline()) for x in range(n)] ans, mn_sum = 0, 1000000000 for i in range(n): sum = 0 for j in range(i, n): sum += a[j] if (sum % 17 == 0) and (sum < mn_sum): mn_sum = sum ans = j - i + 1 print(mn_sum - ans)
Решение 2 (эффективное)
f = open(’27B__tckq.txt’) n = int(f.readline()) mn = 10**30 # минимальная сумма подпоследовательности кратной 17 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 17 # наш делитель tails = [-10**30]*D # префиксные суммы под определенным остатком при делении на 17 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 17 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s < mn: # если сумма кратна 17 и меньше минимума mn = s # перезаписываем минимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 17, # то убавляем префиксную сумму с остатком при делении на 17 равным остатку при делении на 17 у суммы s # тогда мы получим новую сумму s1, которая кратна 17 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 меньше минимума или сумма s1 равна минимуму и при этом её длина меньше if s1 < mn or (s1 == mn and ln1 < ln): mn = s1 # перезаписываем минимум ln = ln1 # перезаписываем длину # если сумма s больше той, что записана в списке tails с таким же остатком при делении на 17 как и у s if s > tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mn-ln)
Ошибка.
Попробуйте повторить позже
Дано натуральное число n, затем последовательность из целых чисел. Из нее необходимо выбрать несколько подряд
идущих чисел так, чтобы каждое следующее число было больше предыдущего. Какую максимальную сумму может иметь
подпоследовательность из выбранных чисел?
Пример входных данных:
Для указанных входных данных ответом должно быть число – максимальная сумма элементов возрастающей
последовательности. В ответе укажите только целую часть числа.
Решение 1 (неэффективное)
f = open("27A.txt") n = int(f.readline()) a = [int(f.readline()) for x in range(n)] ans = 0 for i in range(n): sum = a[i] for j in range(i + 1, n): if a[j] > a[j - 1]: sum += a[j] else: break ans = max(ans, sum) print(ans)
Решение 2 (эффективное)
f = open("27B.txt") n = int(f.readline()) ans = 0 last = -1000000000 summa = 0 for i in range(n): cur = int(f.readline()) if cur > last: summa += cur if summa > ans: ans = summa else: summa = cur last = cur f.close() print(ans)
Ошибка.
Попробуйте повторить позже
Подается число , затем
чисел, нужно найти максимальную сумму подряд идущих чисел, так что среди нет
отрицательных.
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно натуральное число
— количество чисел. Каждая из следующих
строк содержит целое число. В ответе запишите
максимальную сумму сначала для файла A, затем для файла B через пробел.
Решение 1 (неэффективное)
f = open("1.txt") n = int(f.readline()) a = [int(f.readline()) for x in range(n)] ans = 0 for i in range(n): sum = 0 for j in range(i, n): if a[j] >= 0: sum += a[j] else: break ans = max(ans, sum) print(ans) f.close()
Решение 2 (эффективное)
f = open("1.txt") n = int(f.readline()) summa = 0 ans = 0 for i in range(n): x = int(f.readline()) if x >= 0: summa += x ans = max(ans, summa) else: summa = 0 print(ans) f.close()
Ошибка.
Попробуйте повторить позже
Дано число и последовательность из
чисел. Рассматриваются все её непрерывные подпоследовательности, сумма
элементов каждой из которых кратна
. Найдите среди них подпоследовательность с максимальной суммой.
Гарантируется, что хотя бы одна такая сумма в последовательности есть.
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно натуральное
число — количество чисел. Каждая из следующих
строк содержит целое число.
В ответе запишите максимальную сумму кратную трем сначала для файла A, затем для файла B через
пробел.
Решение 1 (неэффективное)
f = open(’27.txt’) n = int(f.readline()) a = [int(f.readline()) for i in range(n)] maxim = 0 for i in range(n): s = 0 for j in range(i, n): s += a[j] if s % 3 == 0: maxim = max(maxim, s) print(maxim)
Переборное решение будет обрабатывать более чисел в файле слишком долго, поэтому напишем эффективное
решение.
Решение 2 (эффективное)
f = open(’2_27B__vxok.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 3 s = 0 # сумма всех чисел файла D = 3 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 3 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s > mx: # если сумма кратна 3 и больше максимума mx = s # перезаписываем максимальную сумму s1 = s - tails[s % D] # если сумма s не кратна 3, # то убавляем префиксную сумму с остатком при делении на 3 равным остатку при делении на 3 у суммы s # тогда мы получим новую сумму s1, которая кратна 3 # если сумма s1 больше максимума mx = max(mx,s1) # перезаписываем максимум # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 3 как и у s tails[s % D] = min(s,tails[s % D]) # перезаписываем сумму print(mx)
Ошибка.
Попробуйте повторить позже
Дана последовательность натуральных чисел. Необходимо найти максимально возможную сумму её непрерывной
подпоследовательности, в которой количество чётных элементов кратно .
Входные данные
Первая строка входного файла содержит целое число — общее количество чисел в наборе. Каждая
из следующих
строк содержит одно число. Гарантируется, что общая сумма всех чисел не превышает
.
Вам даны два входных файла ( и
), каждый из которых имеет описанную выше структуру. В ответе укажите два
числа: сначала значение искомой суммы для файла
, затем для файла
.
Решение 1 (неэффективное)
f = open("27A.txt") n = int(f.readline()) a = [int(f.readline()) for x in range(n)] ans = 0 for i in range(n): cnt, sum = 0, 0 for j in range(i, n): sum += a[j] if a[j] % 2 == 0: cnt += 1 if cnt % 10 == 0: ans = max(ans, sum) print(ans)
Решение 2 (эффективное)
f = open(’Задание_27-B__aht7__tmxb.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)
Ошибка.
Попробуйте повторить позже
Дана последовательность натуральных чисел. Необходимо найти максимально возможную сумму её непрерывной
подпоследовательности, в которой количество нечётных элементов кратно .
Входные данные
Первая строка входного файла содержит целое число — общее количество чисел в наборе. Каждая
из следующих
строк содержит одно число. Гарантируется, что общая сумма всех чисел не превышет
.
Вам даны два входных файла ( и
), каждый из которых имеет описанную выше структуру. В ответе укажите два
числа: сначала значение искомой суммы для файла
, затем для файла
.
Эффективное решение
f = open(’Задание_27-B__aht7__tmxb.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)
Неэффективное решение
f = open("27A.txt") a = [int(x) for x in f] maxim = -10000000000000 for i in range(n): count_odd = 0 s = 0 for j in range(i, n): s += a[j] count_odd += (a[j] % 2 == 1) if count_odd % 10 == 0: maxim = max(maxim, s) print(maxim)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным максимальной сумме цепочки, кратной
.
Найдите такую сумму. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Цепочкой называется
подпоследовательность символов, идущих подряд в исходной последовательности.
В файле первым числом идет количество чисел, а далее сами числа.
В качестве ответа укажите через пробел ответ для файла А и ответ для файла B.
f = open(’fileB__uc2j.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 10 s = 0 # сумма всех чисел файла D = 10 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 10 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s > mx: # если сумма кратна 10 и больше максимума mx = s # перезаписываем максимальную сумму s1 = s - tails[s % D] # если сумма s не кратна 10, # то убавляем префиксную сумму с остатком при делении на 10 равным остатку при делении на 10 у суммы s # тогда мы получим новую сумму s1, которая кратна 10 # если сумма s1 больше максимума mx = max(mx,s1) # перезаписываем максимум # если сумма s меньше той, что записана в списке tails с таким же остатком при делении на 10 как и у s tails[s % D] = min(s,tails[s % D]) # перезаписываем сумму print(mx)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом и
, где
— максимальная сумма цепочки,
кратная
, а
— максимальная сумма цепочки, кратная
. Найдите и выведите на экран
, а также сумму
и
, разделяя их пробелом. Гарантируется, что обе суммы в последовательности есть. Цепочкой называется
подпоследовательность символов, идущих подряд в исходной последовательности.
В файле первым числом идет количество чисел, а далее сами числа.
В качестве ответа укажите через пробел все выведенные числа для файлов А и B.
f = open("27B.txt") n = int(f.readline()) # Создаём 2 списка с минимальными суммами, дающими различные остатки от деления на 17 и 6 соответственно # Нулевые суммы должны быть равны 0, чтобы ничего не вычитать в случае, когда S подходит целиком pref_x = [10 ** 100] * 17 pref_x[0] = 0 pref_y = [10 ** 100] * 6 pref_y[0] = 0 s = mx = my = 0 # # Общая сумма / Макс. сумма для X / Макс. сумма для Y for i in range(n): x = int(f.readline()) s += x # Прибавляем новое число из файла px = s % 17 # Остаток от деления на 17 текущей суммы py = s % 6 # Остаток от деления на 6 текущей суммы if s - pref_x[px] > mx: mx = s - pref_x[px] # Вычитаем подходящий префикс и записываем макс. сумму X if s < pref_x[px]: pref_x[px] = s # После всех проверок записываем текущую сумму в качестве префикса для X if s - pref_y[py] > my: my = s - pref_y[py] # Вычитаем подходящий префикс и записываем макс. сумму Y if s < pref_y[py]: pref_y[py] = s # После всех проверок записываем текущую сумму в качестве префикса для Y print(mx, my, mx + my) # Выводим X, Y, (X + Y)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на
. Найдите
. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Если
существует несколько подпоследовательностей с равной максимальной суммой, нужно выбрать последовательность,
которая заканчивается раньше т.е. последний элемент имеет меньший индекс. Цепочкой называется подпоследовательность
символов, идущих подряд в исходной последовательности.
В файле первым числом идет количество чисел, а далее сами числа.
В качестве ответа укажите через пробел ответ для файла А и ответ для файла B.
f = open(’fileB__uc3k.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 4 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 4 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 4 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 4 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 4 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 4, # то убавляем префиксную сумму с остатком при делении на 4 равным остатку при делении на 4 у суммы s # тогда мы получим новую сумму s1, которая кратна 4 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 с таким же остатком при делении на 4 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
минимальна и делится на
. Найдите разность минимальной суммы и
. Гарантируется, что хотя бы
одна такая сумма в последовательности есть. Если существует несколько подпоследовательностей с равной
минимальной суммой, нужно выбрать последовательность, которая заканчивается раньше т.е. последний элемент
имеет меньший индекс. Цепочкой называется подпоследовательность символов, идущих подряд в исходной
последовательности.
В файле первым числом идет количество чисел, а далее сами числа.
В качестве ответа укажите через пробел ответ для файла А и ответ для файла B.
f = open(’fileB__uc3w.txt’) n = int(f.readline()) mn = 10**30 # минимальная сумма подпоследовательности кратной 17 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 17 # наш делитель tails = [-10**30]*D # префиксные суммы под определенным остатком при делении на 17 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 17 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s < mn: # если сумма кратна 17 и меньше минимума mn = s # перезаписываем минимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 17, # то убавляем префиксную сумму с остатком при делении на 17 равным остатку при делении на 17 у суммы s # тогда мы получим новую сумму s1, которая кратна 17 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 меньше минимума или сумма s1 равна минимуму и при этом её длина меньше if s1 < mn or (s1 == mn and ln1 < ln): mn = s1 # перезаписываем минимум ln = ln1 # перезаписываем длину # если сумма s больше той, что записана в списке tails с таким же остатком при делении на 17 как и у s if s > tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mn-ln)
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность
натуральных чисел. Необходимо определить количество
непрерывных подпоследовательностей, сумма элементов которых кратна 1000.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
10000.
В ответе укажите два числа: сначала значение для файла , затем для файла
.
Неэффективное решение
f = open("6A.txt") n = int(f.readline()) a = [] ans = 0 for i in range(n): a.append(int(f.readline())) for i in range(n): s = 0 for j in range(i, n): s += a[j] if s % 1000 == 0: ans += 1 print(ans)
Эффективное решение
f = open("6B.txt") n = int(f.readline()) prefs = [0] * 1000 # кол-во преф. сумм по остаткам ans, s = 0, 0 for i in range(n): x = int(f.readline()) s += x if s % 1000 == 0: ans += 1 ans += prefs[s % 1000] prefs[s % 1000] += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Дано натуральное число , затем дана последовательность
целых чисел. Необходимо найти максимально возможную
сумму её непрерывной подпоследовательности, в которой количество положительных нечётных элементов кратно
.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит целое число, меньшее
10000.
В ответе укажите два числа: сначала значение для файла , затем для файла
.
Неэффективное решение
f = open("7A.txt") n = int(f.readline()) ans = 0 a = [] for i in range(n): a.append(int(f.readline())) for i in range(n): s = 0 counter = 0 # счетчик полож. нечет. эл-ов for j in range(i, n): s += a[j] if (a[j] > 0) and (a[j] % 2 != 0): counter += 1 if counter % 50 == 0: ans = max(ans, s) print(ans)
Эффективное решение
f = open("7B.txt") n = int(f.readline()) minpref = [0] + [100000000] * 49 # преф суммы по кол-ву полож.неч. чисел ans, counter, s = 0, 0, 0 for i in range(n): x = int(f.readline()) s += x if x > 0 and x % 2 != 0: counter += 1 ans = max(ans, s - minpref[counter % 50]) minpref[counter % 50] = min(s, minpref[counter % 50]) print(ans)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на
. Найдите
. Гарантируется, что хотя бы одна такая сумма в последовательности есть.
Если подходящих цепочек несколько, то найдите длину той, что заканчивается раньше. Цепочкой называется
подпоследовательность элементов, идущих подряд в исходной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whv5.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 36 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 36 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 36 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 36 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 36 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 36, # то убавляем префиксную сумму с остатком при делении на 36 равным остатку при делении на 36 у суммы s # тогда мы получим новую сумму s1, которая кратна 36 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 с таким же остатком при делении на 36 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на 92. Найдите
. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Если
подходящих цепочек несколько, то найдите длину той, что заканчивается раньше. Цепочкой называется
подпоследовательность символов, идущих подряд в исходной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whv7.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 92 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 92 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 92 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 92 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 92 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 92, # то убавляем префиксную сумму с остатком при делении на 92 равным остатку при делении на 92 у суммы s # тогда мы получим новую сумму s1, которая кратна 92 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 с таким же остатком при делении на 92 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(ln)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на
. Найдите такую сумму и число
, деленное на
нацело. В ответе укажите их сумму.
Гарантируется, что хотя бы одна такая сумма в последовательности есть. Если подходящих цепочек несколько, то найдите
длину той, что заканчивается раньше. Цепочкой называется подпоследовательность символов, идущих подряд в исходной
последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whv9.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 54 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 54 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 54 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 54 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 54 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 54, # то убавляем префиксную сумму с остатком при делении на 54 равным остатку при делении на 54 у суммы s # тогда мы получим новую сумму s1, которая кратна 54 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 с таким же остатком при делении на 54 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mx+ln//3)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
максимальна и делится на
. Найдите результат целочисленного деления такой суммы на
. Гарантируется, что хотя
бы одна такая сумма в последовательности есть. Если подходящих цепочек несколько, то найдите длину той, что
заканчивается раньше. Цепочкой называется подпоследовательность символов, идущих подряд в исходной
последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whvb.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 24 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 24 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 24 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 24 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 24 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 24, # то убавляем префиксную сумму с остатком при делении на 24 равным остатку при делении на 24 у суммы s # тогда мы получим новую сумму s1, которая кратна 24 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 с таким же остатком при делении на 24 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mx//ln)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным наибольшей длине цепочки, сумма чисел
которой максимальна и делится на
. Найдите результат произведения такой суммы на
. Не гарантируется, что хотя
бы одна такая сумма в последовательности есть. Если такой суммы нет, выведите
. Цепочкой называется
подпоследовательность символов, идущих подряд в исходной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whvd.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 751 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 751 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 751 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 751 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 751 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 751, # то убавляем префиксную сумму с остатком при делении на 751 равным остатку при делении на 751 у суммы s # тогда мы получим новую сумму s1, которая кратна 751 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 с таким же остатком при делении на 751 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности if mx*ln > 0: print(mx*ln) else: print(-1)
Ошибка.
Попробуйте повторить позже
Последовательность натуральных чисел характеризуется числом , равным длине цепочки, сумма чисел которой
минимальна и делится на
. Если таких цепочек несколько, возьмите ту, которая имеет наименьшую длину. Найдите
разность суммы и
. Гарантируется, что хотя бы одна такая сумма в последовательности есть. Цепочкой называется
подпоследовательность символов, идущих подряд в исходной последовательности.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число
— количество чисел. Каждая из следующих
строк содержит натуральное число, меньшее
.
В ответе укажите два числа: сначала искомое значение для файла , затем для файла
.
f = open(’27B__whvd.txt’) n = int(f.readline()) mn = 10**30 # минимальная сумма подпоследовательности кратной 11 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 11 # наш делитель tails = [-10**30]*D # префиксные суммы под определенным остатком при делении на 11 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 11 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0 and s < mn: # если сумма кратна 11 и меньше минимума mn = s # перезаписываем минимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 11, # то убавляем префиксную сумму с остатком при делении на 11 равным остатку при делении на 11 у суммы s # тогда мы получим новую сумму s1, которая кратна 11 ln1 = (i+1) - len_tails[s % D] # вычисляем длину последовательности суммы s1 # если сумма s1 меньше минимума или сумма s1 равна минимуму и при этом её длина меньше if s1 < mn or (s1 == mn and ln1 < ln): mn = s1 # перезаписываем минимум ln = ln1 # перезаписываем длину # если сумма s больше той, что записана в списке tails с таким же остатком при делении на 11 как и у s if s > tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mn-ln)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Последовательность натуральных чисел характеризуется числом X, равным длине цепочки, сумма чисел которой
максимальна и делится на . Найдите разность суммы и X. Гарантируется, что хотя бы одна такая сумма в
последовательности есть. Если существует несколько подпоследовательностей с равной максимальной суммой,
нужно выбрать последовательность, которая заканчивается раньше, т.е. последний элемент имеет меньший
индекс.
Цепочкой называется подпоследовательность символов, идущих подряд в исходной последовательности.
В ответ укажите числа для файла A и для файла B через пробел.
f = open(’27b__1j92h.txt’) n = int(f.readline()) mx = 0 # максимальная сумма подпоследовательности кратной 21 s = 0 # сумма всех чисел файла ln = 0 # длина подпоследовательности D = 21 # наш делитель tails = [10**30]*D # префиксные суммы под определенным остатком при делении на 21 len_tails = [0]*D # длина префиксной суммы под определенным остатком при делении на 21 for i in range(n): x = int(f.readline()) # считываем текущее число s += x if s % D == 0: # если сумма кратна 21 mx = s # перезаписываем максимальную сумму ln = i + 1 # перезаписываем длину последовательности s1 = s - tails[s % D] # если сумма s не кратна 21, # то убавляем префиксную сумму с остатком при делении на 21 равным остатку при делении на 21 у суммы s # тогда мы получим новую сумму s1, которая кратна 21 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 с таким же остатком при делении на 21 как и у s if s < tails[s % D]: tails[s % D] = s # перезаписываем сумму len_tails[s % D] = i + 1 # указываем длину данной последовательности print(mx-ln)