• Предмет: Информатика
  • Автор: phoenixbeyblade2008
  • Вопрос задан 1 месяц назад

Хто пройшов далі?
Багато жителів Бітакуляндії беруть участь в етапах міжнародних олімпіад з програмування. Усього таких олімпіад, які проводяться у Бітакуляндії, є сім:

IOI - International Olympiad in Informatics

CEOI - Central-Eventora Olympiad in Informatics

EGOI - Eventora Girls Olympiad in Informatics

EJOI - Eventora Junior Olympiad in Informatics

BaltOI - Balticodian Olympiad in Informatics

BalkOI - Balkolian Olympiad in Informatics

JBOI - Junior Balkolian Olympiad in Informatics

Міс М займається проведенням олімпіад різних етапів, а також відборами (відбірково-тренувальними зборами) на всі сім міжнародних олімпіад. Після проведення останнього туру відборів формуються команди по чотири-шість людей на всі сім олімпіад. Але на кожне змагання треба відправити тільки тих учасників, які відповідають критеріям участі в олімпіаді. Ось список алгоритмів визначення учасників команди на олімпіади:

IOI - Найкращі 4 учасники за підсумками балів за всі тури відборів.

CEOI - Найкращі 4 учасники за підсумками балів за всі тури відборів.

EGOI - Найкращі 4 учасники за підсумками балів за всі тури відборів, які є дівчатами.

EJOI - Найкращі 4 учасники за підсумками балів за всі тури відборів, які не старші 15 років.

BaltOI - Найкращі 6 учасників за підсумками балів за всі тури відборів.

BalkOI - Найкращі 4 учасники за підсумками балів за всі тури відборів, які не є 11-класниками.

JBOI - Найкращі 4 учасники за підсумками балів за всі тури відборів, які не є 11 чи 10-класниками.

Якщо учасників менше, ніж потрібна кількість, то це означає, що команда буде складатися з меншої кількості людей. Наприклад, якщо потрібно визначити збірну на EGOI, а дівчат лише двоє, то це означає, що збірна буде складатися лише з двох учасниць, а не з чотирьох.

Оскільки й учасників олімпіад багато, і самих олімпіад багато, а результати хочеться мати миттєво після закінчення змагань, то міс M просить написати програму, яка за результатами та інформацією про учасників дає склад команд учасників міжнародних олімпіад.

Вхідні дані
Перший рядок містить ціле число n (1≤n≤10
4
) — кількість учасників олімпіади.

Кожен з наступних n рядків містить інформацію про учасників олімпіад:

id — унікальний номер учасника (10
6
≤id<10
7
);

gender — стать учасника (male — чоловіча, female — жіноча);

grade — клас навчання учасника (1≤grade≤11);

age — вік учасника (10≤age≤20);

score — кількість балів учасників на всіх турах відборів (0≤score≤10
8
).

Гарантується, що всі id та score учасників різні.

Наступний рядок містить ціле число m (1≤m≤7) — кількість міжнародних олімпіад, для яких Міс M хоче дізнатися склад команд учасників.

Наступні m рядків містять назви міжнародних олімпіад, на які потрібно вивести склад команд учасників. Можливі олімпіади: IOI, CEOI, EGOI, EJOI, BaltOI, BalkOI, JBOI. Гарантується, що всі олімпіади різні.

Вихідні дані
Виведіть m рядків, які містять назви міжнародних олімпіад, у тому ж порядку, що зазначений у вхідних даних та id учасників, які входять до команд, у форматі зростання номера id учасників.

Приклади
Input
10
1000001 female 10 16 400
1000002 male 10 17 500
1000003 male 11 17 505
1000004 male 11 16 405
1000005 female 11 17 450
1000006 female 10 15 480
1000007 male 9 15 445
1000008 male 6 12 350
1000009 male 8 13 399
1000010 male 10 16 430
3
IOI
EGOI
BaltOI
Answer
IOI
1000002
1000003
1000005
1000006

EGOI
1000001
1000005
1000006

BaltOI
1000002
1000003
1000005
1000006
1000007
1000010

Note
Брати участь в IOI можуть усі учасники, табличка результатів матиме такий вигляд:

1000003 — 505 балів

1000002 — 500 балів

1000006 — 480 балів

1000005 — 450 балів

1000007 — 445 балів

1000010 — 430 балів

1000004 — 405 балів

1000001 — 400 балів

1000009 — 399 балів

1000008 — 350 балів

На олімпіаду потрапляють 1000003, 1000002, 1000006, 1000005.

Брати участь в EGOI можуть лише дівчата, табличка результатів матиме такий вигляд:

1000006 — 480 балів

1000005 — 450 балів

1000001 — 400 балів

На олімпіаду потрапляють 1000006, 1000005, 1000001.

Брати участь в BaltOI можуть усі учасники, табличка результатів матиме такий же вигляд, як і на IOI. На олімпіаду потраплять ті ж самі учасники, що й на IOI, але також 1000007 та 1000010.

Оцінювання
У цій задачі є тести, у яких m=1 для кожної можливої олімпіади. Тобто якщо ви вмієте розв'язувати задачу лише для певної олімпіади, то ви гарантовано отримаєте бали.

Ответы

Ответ дал: gidvadiimm
5

Ответ:

Объяснение:

from collections import defaultdict

def determine_team_participants(olympiads, participants):

   results = defaultdict(list)

   for participant in participants:

       id, gender, grade, age, score = participant

       for olympiad in olympiads:

           if olympiad == 'IOI':

               results['IOI'].append((score, id))

           elif olympiad == 'CEOI':

               results['CEOI'].append((score, id))

           elif olympiad == 'EGOI' and gender == 'female':

               results['EGOI'].append((score, id))

           elif olympiad == 'EJOI' and age <= 15:

               results['EJOI'].append((score, id))

           elif olympiad == 'BaltOI':

               results['BaltOI'].append((score, id))

           elif olympiad == 'BalkOI' and grade != 11:

               results['BalkOI'].append((score, id))

           elif olympiad == 'JBOI' and grade < 11:

               results['JBOI'].append((score, id))

   teams = {}

   for olympiad in olympiads:

       scores_ids = results[olympiad]

       scores_ids.sort(key=lambda x: (-x[0], x[1]))  # Sort scores descending, IDs ascending

       team_size = determine_team_size(olympiad, len(scores_ids))

       teams[olympiad] = [participant[1] for participant in scores_ids[:team_size]]

       teams[olympiad].sort()

   return teams

def determine_team_size(olympiad, num_participants):

   if olympiad in ['IOI', 'CEOI']:

       return min(4, num_participants)

   elif olympiad == 'EGOI':

       return min(4, num_participants)

   elif olympiad == 'EJOI':

       return min(4, num_participants)

   elif olympiad == 'BaltOI':

       return min(6, num_participants)

   elif olympiad == 'BalkOI':

       return min(4, num_participants)

   elif olympiad == 'JBOI':

       return min(4, num_participants)

   else:

       return 0

n = int(input())

participants = []

for _ in range(n):

   data = input().split()

   id, gender, grade, age, score = int(data[0]), data[1], int(data[2]), int(data[3]), int(data[4])

   participants.append((id, gender, grade, age, score))

m = int(input())

olympiads = [input().strip() for _ in range(m)]

teams = determine_team_participants(olympiads, participants)

for olympiad in olympiads:

   print(olympiad)

   for participant in teams[olympiad]:

       print(participant)


konoplindima377: 80/100 но всеровно огромное спасибо
phoenixbeyblade2008: Благодарю!!!
konoplindima377: Сhampionship gifts решил/а?
konoplindima377: Кто-то сделал Championship Gifts?
0509243261a: это какой язык?
Вас заинтересует