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

При про­ве­де­нии экс­пе­ри­мен­та за­ря­жен­ные ча­сти­цы по­па­да­ют на чув­стви­тель­ный экран, пред­став­ля­ю­щий из себя мат­ри­цу раз­ме­ром 100 000 на 100 000 точек. При по­па­да­нии каж­дой ча­сти­цы на экран в про­то­ко­ле фик­си­ру­ют­ся ко­ор­ди­на­ты по­па­да­ния: номер ряда (целое число от 1 до 100 000) и номер по­зи­ции в ряду (целое число от 1 до 100 000).

Точка экра­на, в ко­то­рую по­па­ла хотя бы одна ча­сти­ца, счи­та­ет­ся свет­лой, точка, в ко­то­рую ни одна ча­сти­ца не по­па­ла,  — тёмной.

При ана­ли­зе ре­зуль­та­тов экс­пе­ри­мен­та рас­смат­ри­ва­ют линии. Ли­ни­ей на­зы­ва­ют груп­пу свет­лых точек, рас­по­ло­жен­ных в одном ряду под­ряд, то есть без тёмных точек между ними. Линия долж­на со­дер­жать не менее 3 свет­лых точек, слева и спра­ва от линии долж­на быть тёмная точка или край экра­на.

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

За­да­ние 26

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

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N  — общее ко­ли­че­ство ча­стиц, по­пав­ших на экран. Каж­дая из сле­ду­ю­щих N строк со­дер­жит 2 целых числа: номер ряда и номер по­зи­ции в ряду.

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

 

Ответ:

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

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке Python.

f = open('26.txt').readlines()[1:]

Sl = {i: [] for i in range(1, 10**5 + 1)}

for i in f:

ind, v = map(int, i.split())

Sl[ind] += [v]

def func(v):

st = ''

for x, y in zip(v, v[1:]):

st += '*' if x + 1 == y else '* '

return len([1 for s in (st + '*').split() if len(s) >= 3])

Sl = {i: func(sorted(set(v))) for i, v in Sl.items()}

print((t:=max(Sl.values())),\

list(Sl.keys())[::-1][list(Sl.values())[::-1].index(t)])

 

Ответ: 7 97924.

 

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

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

a=sorted(set(a)) # из­бав­ля­ем­ся от по­втор­ных по­па­да­ний и сор­ти­ру­ем

dic={}

l=1

for i in range(1,len(a)):

if a[i][0]==a[i-1][0] and a[i][1]-a[i-1][1]==1:

l+=1 # счи­та­ем длину линии

else:

if l >= 3: dic[a[i-1][0]]=dic.get(a[i-1][0],0)+1 # кол-во линий дли­ной 3 и более

l=1

if l >= 3: dic[a[-1][0]]=dic.get(a[-1][0],0)+1 # по­след­няя линия

mdv=max(dic.values()) # макс. ко­ли­че­ство линий в ряду

print(mdv,max([x for x in dic if dic[x]==mdv]))


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