Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 1

Задача про олимпиаду

28.11.2014, 10:28. Показов 1123. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Есть такая интересная задача:
Кликните здесь для просмотра всего текста

В финал олимпиады по программированию вышло n участников.
Итоги олимпиады подводились по трем критериям:
- скорость написания программ: за одно и то же время участники решили соответственно S[1], S[2], ..., S[n] задач;
- скорость выполнения программ: на выполнение программ участников ушло соответственно T[1], T[2], ..., T[n] минут;
- оригинальность: программы каждого участника получили соответственно M[1], M[2], ..., M[n] баллов.
Считая, что для i-го участника известны S[i], T[i], M[i] распределить их по местам по следующим критериям:
- участник, решивший больше задач занимает лучшее место;
- при равном количестве решенных задач лучшее место занимает участник, чьи задачи выполняются быстрее;
- при равных количестве решенных задач и скорости их выполнения лучшее место достается участнику с большим количеством баллов за оригинальность;
- при одинаковом количестве баллов по каждому из критериев участники разделяют одно место и располагаются в одной строке по алфавиту.
Входные данные
Во входном текстовом файле с именем inp.dat заданы количество участников и имена участников и их результаты. В первой строке указано количество участников. В следующей, второй строке через пробелы задано имя первого участника и его результаты и т.д.
Спецификация ввода
<N>
<Имя1> <S[1]> <T[1]> <M[1]>
<Имя2> <S[2]> <T[2]> <M[2]>
... ... ... ...
<Имяn> <S[n]> <T[n]> <M[n]>
Выходные данные
В выходной текстовый файл с именем out.dat в порядке занятых мест с новой строки вывести места (через тире) и имена участников, занявших данные места (по алфавиту через пробел).
Спецификация вывода
<места> <список имен>
<места> <список имен>
<места> <список имен>
<места> <список имен>
Пример:

Inp.dat
5
Иванов 3 4 1
Петров 3 4 3
Сидоров 5 3 4
Кузнецов 5 2 1
Фролов 3 4 3

out.dat
1 Кузнецов
2 Сидоров
3-4 Петров Фролов
5 Иванов


Реализовал ее частично на основе примера так:

Pascal
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Type
Sved=record
za:longint;
name:string[30];
time:longint;
score:longint;
end;
Var
T:array[1..10] of sved;
P:array[1..10] of string;
TEMP:array[1..10] of sved;
i,j,k,e,max,h,tt,b,n:longint;
tmp,tmpp:string;
st:boolean;
inp,otp:text;
Begin
assign(inp,'inp.dat');
reset(inp);
readln(inp,k);
 
for i:=1 to k do
 readln(inp,P[i]);
 close(inp);
 
for i:=1 to k do begin
 tmp:=P[i];
  st:=true;
 j:=0;
while st=true do begin
 j:=j+1;
 if tmp[j]=' ' then begin
 T[i].name:=copy(tmp,1,j-1);   //Запись имени
 delete(P[i],1,j);
 st:=false;
      end;
     end;
   end;
 
 for i:=1 to k do begin
 tmp:=P[i];
 st:=true;
 j:=0;
while st=true do begin
 j:=j+1;
 if tmp[j]=' 'then begin
 tmpp:=copy(tmp,1,j-1); 
 Val(tmpp,T[i].za,e);                //Запись кол-ва задач в массив
 delete(P[i],1,j);
 st:=false;
     end;
   end;
 end;
 
for i:=1 to k do begin
 tmp:=P[i];
 st:=true;
 j:=0;
while st=true do begin
 j:=j+1;
 if tmp[j]=' 'then begin
 tmpp:=copy(tmp,1,j-1);
 Val(tmpp,T[i].time,e);      //Запись времени в массив
 delete(P[i],1,j);
 st:=false;
     end;
   end;
 end;
 
 for i:=1 to k do begin
 tmp:=P[i];
 Val(tmp,T[i].score,e);      //Запись баллов оригинальности в массив
 delete(P[i],1,j);
 end;
             n:=k;
 repeat
  tt:=0;
  for j:=1 to n-1 do
  if T[j].za<T[j+1].za
    then
      begin
        TEMP[j]:=T[j];     //сортировка по кол-ву решенных задач
        T[j]:=T[j+1];
        T[j+1]:=TEMP[j];
        tt:=j
        end;
  n:=tt;
  until tt=0;
 
  for i:=1 to k do begin  //временный вывод
  writeln;
  write(i,' ',T[i].name,' ');
  write(T[i].za,' ');
  write(T[i].time,' ');
  write(T[i].score,' ');
end;
 
 readln;
 
END.
Проблема в том, что не знаю как реализовать сортировку по нескольким критериям, т.е по задаче: "- участник, решивший больше задач занимает лучшее место;
- при равном количестве решенных задач лучшее место занимает участник, чьи задачи выполняются быстрее;
- при равных количестве решенных задач и скорости их выполнения лучшее место достается участнику с большим количеством баллов за оригинальность;
- при одинаковом количестве баллов по каждому из критериев участники разделяют одно место и располагаются в одной строке по алфавиту."

Уже несколько дней ломаю голову, помогите чем сможете, спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2014, 10:28
Ответы с готовыми решениями:

Задача про олимпиаду
На олимпиаде по информатике на школьников заполнялись анкеты: фамилия, номер школы, класс, занятое место. Напечатать: 1) списки школ,...

про олимпиаду)
вот недавно попалась интересная задача: В командной олимпиаде по программированию участвуют N команд. Каждая команда состоит из 3-х...

Задача на олимпиаду
п. 1.4 правил форума: &quot;Официальными языками форума являются русский и английский языки. Размещение сообщений на других языках...

1
26 / 26 / 17
Регистрация: 08.04.2012
Сообщений: 202
28.11.2014, 20:58
писать лень подскажу алгоритм для шкалы от 1 до 100 баллов. т.е макс может быть и 3 главное чтобы не меньше 1. и без дробных

создаешь 4 массива, с именем, задачами, скоростью и оригинальностью

с задачами каждое число умножаешь на 1 000 000
со скоростью на 1 000

и после этого складываешь по пунктно все 3 массива между собой

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

Добавлено через 6 минут
пример
Иванов 1 100 100=1 100 100
Петров 2 1 1 =2 001 001
Сидоров 2 1 100=2 001 100
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2014, 20:58
Помогаю со студенческими работами здесь

Нужно сделать такой фон (Полоску фона (адаптивного) как на Рамблере про олимпиаду)
Привет. Нужно сделать такую полоску фона (адаптивного) как на Рамблере про олимпиаду http://www.rambler.ru/sochi/. Я так понимаю что это...

Задача про взлом кода из книги Эрика Фримена про основы javascript в конце 5 главы.
читаю книгу Эрика Фримена про основы javascript.В конце 5 главы есть задачка про взлом кода.Никак не могу понять как ее решить.НЕ понимаю...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка по...

З а д а ч а на олимпиаду CРОЧНО.
Люди помогите пожалуйста.... Зарплата. В отделе работают N сотрудников , которые получают з/п в рублях. Требуется определить: на...

Проверить мою Олимпиаду
Всем добрый день, у меня заданно 5 задач я в 9 классе там 2 из 10-11 + там всего 2 на темы которые мы учили. Я вот что смог решить,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru