Задания
Версия для печати и копирования в MS Word
Тип 26 № 83156
i

В одном го­ро­де есть более 100 жилых домов. Все дома про­ну­ме­ро­ва­ны, на­чи­ная с еди­ни­цы. Управ­ля­ю­щая ком­па­ния по­лу­чи­ла за­яв­ки на ка­пи­таль­ный ре­монт от жи­те­лей домов. В за­яв­ке ука­зан номер дома и номер подъ­ез­да, где тре­бу­ет­ся ре­монт, при этом каж­дой за­яв­ке при­сва­и­ва­ет­ся уни­каль­ный иден­ти­фи­ка­тор  — на­ту­раль­ное число, не пре­вы­ша­ю­щее 1 000 000. На один и тот же подъ­езд могут быть за­яв­ки сразу от не­сколь­ких жи­те­лей.

Опре­де­ли­те номер дома, ко­то­рый имеет наи­боль­шее ко­ли­че­ство под­ряд иду­щих подъ­ез­дов с за­яв­ка­ми на ка­пи­таль­ный ре­монт. Если есть не­сколь­ко домов с оди­на­ко­вым мак­си­маль­ным ко­ли­че­ством подъ­ез­дов, не­об­хо­ди­мо вы­брать тот дом, у ко­то­ро­го наи­мень­ший ис­ко­мый подъ­езд имеет мак­си­маль­ный номер за­яв­ки.

 

Вход­ные дан­ные.

За­да­ние 26

В пер­вой стро­ке вход­но­го файла на­хо­дит­ся на­ту­раль­ное число N (N ≤ 200 000)  — ко­ли­че­ство по­лу­чен­ных за­явок на ка­пи­таль­ный ре­монт.

Сле­ду­ю­щие N строк со­дер­жат три числа: номер за­яв­ки, номер дома и номер подъ­ез­да (все числа на­ту­раль­ные, не пре­вы­ша­ю­щие 1 000 000).

 

Вы­ход­ные дан­ные.

За­пи­ши­те в от­ве­те два на­ту­раль­ных числа: сна­ча­ла номер дома с мак­си­маль­ным ко­ли­че­ством под­ряд иду­щих подъ­ез­дов, затем номер пер­во­го най­ден­но­го подъ­ез­да из мак­си­маль­но­го числа под­ряд иду­щих подъ­ез­дов в этом доме.

 

Ответ:

Спрятать решение

Ре­ше­ние.

От­кро­ем файл с по­мо­щью ре­дак­то­ра элек­трон­ных таб­лиц.

Уда­лим зна­че­ние в пер­вой стро­ке.

От­сор­ти­ру­ем таб­ли­цу сна­ча­ла по но­ме­ру дома, потом по но­ме­ру квар­ти­ры, по­след­нее по но­ме­ру за­яв­ки.

По­лу­чим таб­ли­цу:

Чтобы убрать дуб­ли­ка­ты при­ме­ним фильтр по усло­вию

Ско­пи­ру­ем по­лу­чив­шу­ю­ся таб­ли­цу на от­дель­ный лист.

В столб­це D будем счи­тать номер подъ­ез­да по по­ряд­ку, чтобы уви­деть мак­си­маль­ное число иду­щих под­ряд подъ­ез­дов.

В ячей­ку D1 на­пи­шем зна­че­ние 1. В ячей­ку D2 за­пи­шем фор­му­лу =ЕСЛИ(И(C2-C1=1;B2=B1);D1+1;1) и ско­пи­ру­ем ее до конца спис­ка.

При­ме­ним фильтр для столб­ца D и вы­бе­рем мак­си­маль­ное число иду­щих подъ­ез­дов - 7:

По­лу­чим таб­ли­цу:

Так как есть не­сколь­ко домов с оди­на­ко­вым мак­си­маль­ным ко­ли­че­ством подъ­ез­дов, вы­би­ра­ем тот дом, у ко­то­ро­го наи­мень­ший ис­ко­мый подъ­езд имеет мак­си­маль­ный номер за­яв­ки. Наи­мень­шие подъ­ез­ды будут 701 (так для груп­пы из 7 подъ­ез­дов, где 707 по­след­ний, 701 будет точ­кой от­че­та) для пер­вой най­ден­ной за­яв­ки и 805 для вто­рой.

От­сор­ти­ру­ем за­яв­ки по но­ме­ру дома и но­ме­ру подъ­ез­да. У пер­вой най­ден­ной кон­фи­гу­ра­ции номер за­яв­ки будет боль­ше, сле­до­ва­тель­но, ответ: номер дома - 171 и номер подъ­ез­да - 701

 

Ответ: 171 701.

 

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

a=[list(map(int,s.split())) for s in open('26.txt')][1:]

dic={} # сло­варь с клю­ча­ми (№ дома, № подъ­ез­да)

for x in a:

dompod=(x[1],x[2])

dic[dompod]=max(dic.get(dompod,0),x[0]) # мак­си­маль­ный номер за­яв­ки в подъ­ез­де

b=sorted(list(dic.items()),key=lambda x:x[0]) # по воз­рас­та­нию № дома и № подъ­ез­да

groups=[] # груп­пы под­ряд иду­щих подъ­ез­дов в одном доме

gr=[b[0]] # те­ку­щая груп­па

for x in b[1:]:

if x[0][0]==gr[-1][0][0] and x[0][1]-gr[-1][0][1]==1:

gr.append(x)

else:

groups.append(gr)

gr=[x]

groups.append(gr)

mgl=max([len(x) for x in groups]) # мак­си­маль­ная длина груп­пы

ans=[x[0] for x in groups if len(x)==mgl] # ми­ни­маль­ные подъ­ез­ды из групп с мак­си­маль­ной дли­ной

mnz=max([x[1] for x in ans]) # мак­си­маль­ный номер за­яв­ки

for x in ans:

if x[1]==mnz: print(*x[0])


Аналоги к заданию № 83156: 83184 Все