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

Участ­ни­ки вик­то­ри­ны пись­мен­но от­ве­ча­ют на 10 во­про­сов раз­лич­ной слож­но­сти. За пра­виль­ный ответ на­чис­ля­ет­ся от 1 до 5 бал­лов в за­ви­си­мо­сти от слож­но­сти во­про­са. За не­вер­ный ответ вы­чи­та­ет­ся от 1 до 5 бал­лов.

Участ­ник может не от­ве­чать на какой-то во­прос, в таком слу­чае баллы за этот во­прос не на­чис­ля­ют­ся.

По ре­зуль­та­там вик­то­ри­ны для каж­до­го участ­ни­ка вы­чис­ля­ют­ся три по­ка­за­те­ля:

1)  сумма  — общее ко­ли­че­ство на­бран­ных бал­лов;

2)  плюсы  — сумма бал­лов без учёта не­вер­ных от­ве­тов;

3)  от­ве­ты  — общее ко­ли­че­ство сдан­ных от­ве­тов (вер­ных и не­вер­ных).

В таб­ли­це ре­зуль­та­тов участ­ни­ки рас­по­ла­га­ют­ся по убы­ва­нию пер­во­го по­ка­за­те­ля  — суммы, при ра­вен­стве сумм – по убы­ва­нию вто­ро­го по­ка­за­те­ля (плю­сов), при ра­вен­стве сумм и плю­сов – по убы­ва­нию тре­тье­го по­ка­за­те­ля (от­ве­тов). При ра­вен­стве всех трёх по­ка­за­те­лей участ­ни­ки рас­по­ла­га­ют­ся в ито­го­вой таб­ли­це в по­ряд­ке воз­рас­та­ния их лич­ных но­ме­ров.

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

В сле­ду­ю­щий тур про­хо­дят участ­ни­ки, за­няв­шие места в пер­вой чет­вер­ти по­лу­чен­ной таб­ли­цы (учи­ты­ва­ют­ся толь­ко по­ло­жи­тель­ные ре­зуль­та­ты), а также те, у ко­то­рых все три по­ка­за­те­ля такие же, как у за­няв­ше­го по­след­нее место в пер­вой чет­вер­ти таб­ли­цы.

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

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

Опре­де­ли­те ID участ­ни­ка, за­ни­ма­ю­ще­го в таб­ли­це пер­вое место среди тех, кто прошёл в до­пол­ни­тель­ный от­бо­роч­ный тур, а также общее ко­ли­че­ство участ­ни­ков до­пол­ни­тель­но­го от­бо­роч­но­го тура.

За­да­ние 26

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

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N (N ≤ 10 000)  — общее ко­ли­че­ство участ­ни­ков. Каж­дая из сле­ду­ю­щих N строк со­от­вет­ству­ет од­но­му участ­ни­ку и со­дер­жит 11 целых чисел, раз­делённых про­бе­ла­ми: сна­ча­ла ID участ­ни­ка, затем  — баллы, по­лу­чен­ные им за каж­дый из 10 во­про­сов.

Га­ран­ти­ру­ет­ся, что ID участ­ни­ков не по­вто­ря­ют­ся.

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

 

Ответ:

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

Ре­ше­ние.

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

f = open("downloads26.txt").readlines()

f = [x.replace("\n", "").split() for x in f]

f = [list(map(int, x)) for x in f]

 

round_1 = []

 

for i in f:

summ = sum(i[1:])

id_ = i[0]

 

x = 0 #сумма +

c = 0 #кол-во от­ве­тов

for elem in i[1:]:

if elem > 0:

x += elem

 

if elem != 0:

c +=1

 

if summ > 0:

round_1.append((summ,x,c,id_))

 

round_1 = sorted(round_1, key=lambda x: [x[3]])

round_1 = sorted(round_1, key=lambda x: [x[0], x[1], x[2]],reverse = True)

 

round_2 = round_1[:len(round_1)//4]

 

a = round_1[len(round_1)//4]

 

for elem in round_1[len(round_1)//4:]:

if elem[0] == a[0] and elem[1] == a[1] and elem[2] == a[2]:

round_2.append(elem)

 

 

b = round_1[1808:((len(round_1)-len(round_2))//10)+1808]

 

final_round = b

 

for elem in round_1[((len(round_1)-len(round_2))//10)+1808:]:

if elem[0] == 12 and elem[1] == 16 and elem[2] == 8:

final_round.append(elem)

 

print(final_round[0][3],len(final_round))

 

Ответ: 3348 и 535.

 

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

def до­пол­не­ние(спи­сок,по­зи­ция):

зна­че­ния = спи­сок[по­зи­ция][1:]

while спи­сок[по­зи­ция][1:] == зна­че­ния: по­зи­ция += 1

return по­зи­ция

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

по­ка­за­те­ли = [[x[0],sum(x[1:]),sum(t for t in x[1:] if t > 0),len([t for t in x[1:] if t != 0])] for x in баллы if sum(x[1:])>0]

по­ка­за­те­ли.sort(key = lambda x: x[0])

по­ка­за­те­ли.sort(key = lambda x: x[1:],reverse = True)

пер­вый_тур = до­пол­не­ние(по­ка­за­те­ли,len(по­ка­за­те­ли)//4-1)

не_про­шед­шие = по­ка­за­те­ли[пер­вый_тур:]

до­пол­ни­тель­ный_тур = до­пол­не­ние(не_про­шед­шие,len(не_про­шед­шие)//10-1)

print(не_про­шед­шие[0][0],до­пол­ни­тель­ный_тур)