Форум » Обработка числовых последовательностей » № 2663 (27 задание) ошибка или моя ошибка, что навряд ли » Ответить

№ 2663 (27 задание) ошибка или моя ошибка, что навряд ли

hellprogram: № 2663 Ответ на сайте: 66228 203412732 Моя программа: with open('1.txt','r') as list: n = int(list.readline()) sum = 0 minraz = [10000 for i in range(3)] for i in range(n): x,y = map(int, list.readline().split()) if abs(x-y) < minraz[1] and abs(x-y) % 3 == 1: minraz[1] = abs(x-y) if abs(x-y) < minraz[2] and abs(x-y) % 3 == 2: minraz[2] = abs(x-y) sum += min(x,y) if sum % 3 == 0: print(sum) if sum % 3 == 1: sum += minraz[2] if sum % 3 == 2: sum += minraz[1] print(sum) Вывод моей программы: 66480 203412732 Выдаёт верный ответ только у файла Б, а у А файла ответ не подходит, хотя я проверил, что никаких ошибок здесь нет

Ответов - 7

Поляков: Это задача № 3 из основного сборника. На сайте есть решения всех 27-х задач, сравните авторское решение со своим.

hellprogram: for k in range(1, D): ----r0 = (r + k) % D ----dMinNew[r0] = min( d+dMin[k], dMinNew[r0] ) Можете ли вы пояснить, что делает это место программы в общем файле? Fin = open("27-3a.txt") D = 3 N = int( Fin.readline() ) s, dMin = 0, [10001]*D for i in range(N): ----a, b = map( int, Fin.readline().split() ) ----s += min( a, b ) ----d = abs( a-b ) ----r = d % D ----if r > 0: --------dMinNew = dMin[:] ----for k in range(1, D): --------r0 = (r + k) % D --------dMinNew[r0] = min( d+dMin[k], dMinNew[r0] ) ----dMinNew[r] = min( d, dMinNew[r] ) ----dMin = dMinNew[:] ----print(dMinNew) if s % D == 0: ----print( s ) else: ----print( s, s%D ) ----print( dMin ) ----print( s + dMin[D - s % D] ) Fin.close()

Поляков: hellprogram пишет: Можете ли вы пояснить, что делает это место программы в общем файле? Почитайте, пожалуйста, разбор в файле ege27.doc.


Поляков: Код программы оформляется с помощью тэга [ pre2 ].

Илья Женецкий: [pre2] for l in 'ab': ...f = open(f'data/2663{l}.txt') ...n = int(f.readline()) ...delta, s = [float('inf')]*3, 0 ...for i in range(n): ......a, b = map(int, f.readline().split()) ......s += min(a, b) ...delta[abs(a-b)%3]=min(delta[abs(a-b)%3], abs(a-b)) ...f.close() ...if s%3!=0: ......s-=delta[s%3] ...print(s, end=' => ') ...print(f'{s}%3={s%3}') [/pre2] Программа выходит: 65751 => 65751%3=0 203412729 => 203412729%3=0

Поляков: Илья Женецкий пишет: Программа выходит: 65751 => 65751%3=0 203412729 => 203412729%3=0 А как у вас получается результат, который меньше минимальной суммы БЕЗ дополнительных ограничений?

Илья Женецкий: <pre2> for l in 'ab': ...f = open(f'data/2663{l}.txt') ...n = int(f.readline()) ...delta, s = [float('inf')]*3, 0 ...for i in range(n): ......a, b = map(int, f.readline().split()) ......s += min(a, b) ...delta[abs(a-b)%3]=min(delta[abs(a-b)%3], abs(a-b)) ...f.close() ...if s%3!=0: ......s-=delta[s%3] ...print(s, end=' => ') ...print(f'{s}%3={s%3}') </pre2> Программа выходит: 65751 => 65751%3=0 203412729 => 203412729%3=0



полная версия страницы