Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

26 задание из ЕГЭ по информатике, не понимаю, где ошибка!?

Святослав Ронжин Ученик (141), на голосовании 1 год назад
задание:
(№ 3767) (А. Кабанов) В текстовом файле записан набор натуральных чисел. Гарантируется, что все числа различны. Рассматриваются пары чисел из набора, между которыми в отсортированном массиве помещаются не менее 100 чисел из того же набора. Определите количество пар с чётной суммой, а также среднее арифметическое чисел пары с наибольшей чётной суммой.
Входные данные представлены в файле 26-51.txt следующим образом. Первая строка содержит целое число N – общее количество чисел в наборе. Каждая из следующих N строк содержит одно число, не превышающее 109.
В ответе запишите два целых числа: сначала количество пар, затем наибольшее среднее арифметическое.
Пример входного файла:
8
3
8
14
11
2
16
5
9
В примере рассмотрим пары, между которыми помещаются не менее 3 чисел из набора. В данном случае есть четыре подходящие пары: 2 и 14, 2 и 16, 3 и 11, 8 и 16. В ответе надо записать числа 4 и 12.

Файл: https://kpolyakov.spb.ru/cms/files/ege-sort/26-51.txt
Ответ: 6000514 99161667

Мое решение:
f = open('26-51.txt')
a = [int(i) for i in f]
f.close()
b = sorted(a)
mx = -9999
c = 0
for m in range(0, len(a) - 1):
....print(m)
....for n in range(m + 1, len(a)):
........if ((a[m] + a[n]) % 2) == 0:
............if (b.index(a[n]) - b.index(a[m])) >= 101:
................c += 1
................if (a[n] + a[m]) > mx:
....................mx = a[n] + a[m]
print(c, mx // 2)
Мой ответ: 3030321 99159213
Помогите добрые люди!!
Голосование за лучший ответ
Дмитрий Филюшкин Мудрец (12219) 1 год назад
Здравствуйте, Святослав.
Вот, доделал Вашу программу:
 f = open('26-51.txt') 
a = [int(i) for i in f]
f.close()
# Удаляю самое первое число, так как оно - количество
# чисел в файле
del a[0]
b = sorted(a)
# Для ускорения поиска индекса числа a[n] в списке b я
# создаю словарь, с помощью которого по числу узнаю его
# индекс в отсортированном списке b
indexs = {}
for i in range(len(a)):
indexs[a[i]] = b.index(a[i])
mx = -9999
c = 0
for m in range(0, len(a) - 1):
for n in range(m + 1, len(a)):
if ((a[m] + a[n]) % 2) == 0:
# Разницу между индексами беру по модулю
if abs(indexs[a[n]] - indexs[a[m]]) >= 101:
c += 1
if (a[n] + a[m]) > mx:
mx = a[n] + a[m]
print(c, mx // 2)
Святослав РонжинУченик (141) 1 год назад
Здравствуйте, большое спасибо!
Дмитрий Филюшкин Мудрец (12219) Святослав Ронжин, пожалуйста!
Похожие вопросы