# bug: jak zmieniam wzorek, to dopuszczam ten sam rozmiar # pomysł: oprócz najlepsza["all"] pamiętać najlepszą krótszą from sys import stdin, stdout from collections import defaultdict l_klocki, kara = [int(x) for x in stdin.readline().split()] wielkosc = 0 widziane = set() najlepsza = defaultdict(int) for _ in range(l_klocki): bok, wz = [int(x) for x in stdin.readline().split()] if bok > wielkosc: wielkosc = bok widziane = set() najlepsza["prev"] = najlepsza["all"] if wz in widziane: continue widziane.add(wz) ta_wieza = max(najlepsza[wz] + bok, najlepsza["prev"] + bok - kara) najlepsza[wz] = max(najlepsza[wz], ta_wieza) najlepsza["all"] = max(najlepsza["all"], ta_wieza) stdout.write(str(najlepsza["all"]))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # bug: jak zmieniam wzorek, to dopuszczam ten sam rozmiar # pomysł: oprócz najlepsza["all"] pamiętać najlepszą krótszą from sys import stdin, stdout from collections import defaultdict l_klocki, kara = [int(x) for x in stdin.readline().split()] wielkosc = 0 widziane = set() najlepsza = defaultdict(int) for _ in range(l_klocki): bok, wz = [int(x) for x in stdin.readline().split()] if bok > wielkosc: wielkosc = bok widziane = set() najlepsza["prev"] = najlepsza["all"] if wz in widziane: continue widziane.add(wz) ta_wieza = max(najlepsza[wz] + bok, najlepsza["prev"] + bok - kara) najlepsza[wz] = max(najlepsza[wz], ta_wieza) najlepsza["all"] = max(najlepsza["all"], ta_wieza) stdout.write(str(najlepsza["all"])) |