Вопрос задан 12.07.2023 в 23:35. Предмет Информатика. Спрашивает Мамонтов Егор.

В этом году третий раз одна известная компания проводит соревнование по программированию

искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. После проведения очередного тура, Вася решил, что для дальнейшего улучшения своей стратегии необходимо просмотреть все бои с теми соперниками, которые сопоставимы с ним по проценту побед. Задана таблица результатов боев в прошедшем раунде. В каждой строке записаны ник соперника Васи и итоговый счет. Первое число показывает, сколько шайб забила стратегия Васи, вторая — сколько шайб забила стратегия соперника. Необходимо подсчитать процент побед каждого участника и вывести результат, отсортировав его в порядке неубывания процентов. Если процент побед оказался одинаковым, то нужно упорядочить записи по никам лексикографически. Формат ввода В первой строке входного файла записано целое число N (1 ≤ N ≤ 105) — количество записей в таблице. В каждой из последующих N строк через пробел записаны ник соперника, сколько забила Васина команда и сколько забил соперник. Гарантируется, что каждый ник — непустая строка, длина которой не превосходит 10 символов и состоящая из строчных букв латинского алфавита. Так же известно, что никто из участников не забивал больше 1000 голов. Формат вывода В первой строке выходного файла выведите количество соперников. В последующих строках выведите ник соперника и процент побед Васиной команды с точностью не хуже шести знаков после запятой. Пример 1 Ввод1 tpusct 1 60 Вывод 1 tpusct 0.0000000000 Пример 2 Ввод35 v 86 45 v 77 90 pmuehueqm 74 40 mslrsnshk 71 13 fy 43 1 mslrsnshk 76 87 gwpr 37 78 mxzsoel 4 39 pmuehueqm 78 75 v 59 45 gwpr 25 52 bjyaiptxmw 48 48 mxzsoel 13 76 givnyujn 38 70 mslrsnshk 58 66 givnyujn 33 66 pmuehueqm 100 53 pmuehueqm 80 17 pmuehueqm 2 48 mxzsoel 68 4 bjyaiptxmw 43 40 be 81 92 be 34 55 bjyaiptxmw 88 5 mslrsnshk 49 82 givnyujn 91 30 bjyaiptxmw 33 19 bjyaiptxmw 46 17 i 70 35 givnyujn 38 55 pmuehueqm 7 81 mxzsoel 0 9 i 64 30 v 80 42 mslrsnshk 79 64 Вывод10 be 0.0000000000 gwpr 0.0000000000 givnyujn 25.0000000000 mxzsoel 25.0000000000 mslrsnshk 40.0000000000 pmuehueqm 66.6666666667 v 75.0000000000 bjyaiptxmw 80.0000000000 fy 100.0000000000 i 100.0000000000 ​
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Нескоромный Ярик.

Ответ:

PascalABC.NET 3.5.1

program D_contest;

type

 TStat = record

   nick: string;

   wins, battles: integer;

   proc: real;

 end;

var

 N, i, num: integer;

 str: array of string;

 stat: array of TStat;

 nick: string;

function found(ni_ck: string): integer;

begin

 found := -1;

 for var e := 0 to Length(stat) - 1 do

 begin

   if stat[e].nick = ni_ck then  

   begin

     found := e;

     break;

   end;

 end;

end;

var

 v_pts, e_pts, l_e: integer;  

 F: textfile;

 k: real;

 s: string;

begin

 Assign(F, 'input.txt');

 Reset(F);

 readln(F, n);

 SetLength(str, n);

 SetLength(stat, 1);

 for i := 0 to n - 1 do

 begin

   readln(F, str[i]);    

   //get enemy_nick

   nick := Copy(str[i], 1, Pos(' ', str[i]) - 1);    

   Delete(str[i], 1, Pos(' ', str[i]));

   

   if (stat[0].nick <> '') then

   begin

     num := found(nick);

     if (num = -1) then //not found

     begin

       l_e := Length(stat);

       SetLength(stat, l_e + 1);

       num := l_e;

       stat[num].nick := nick;

     end;

   end

     else

   begin

     stat[0].nick := nick;

   end;

   

   stat[num].battles += 1;

   

     //get Vania_points

   v_pts := StrToInt(Copy(str[i], 1, Pos(' ', str[i])));    

   Delete(str[i], 1, Pos(' ', str[i]));

   

     //get enemy_points

   e_pts := StrToInt(str[i]);

   

   if v_pts > e_pts Then

     stat[num].wins += 1;

 end;

 Close(F);        

 

 //вычисляю процент побед

 for i := 0 to Length(stat) - 1 do

 begin

   stat[i].proc := stat[i].wins / stat[i].battles;  

 end;

 

 //сортировка по процентам

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if stat[j].proc > stat[j + 1].proc then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 //сортировка по алфавиту

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if (stat[j].proc = stat[j + 1].proc) and (stat[j].nick > stat[j + 1].nick) then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 writeln(Length(stat));

 for i := 0 to Length(stat) - 1 do

 begin

   write(stat[i].nick, ' ');

   writeln(stat[i].proc * 100:0:6);

 end;

end.

Объяснение:

Смотри код

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи мы должны вычислить процент побед Васиной команды для каждого соперника и отсортировать результаты в порядке неубывания процентов. Для начала, нужно прочитать входные данные и обработать их. Затем вычислить процент побед и отсортировать результаты. Вот Python-код, который решает эту задачу:

python
def calculate_win_percentage(wins, total_games): if total_games == 0: return 0 return wins / total_games * 100 def main(): n = int(input()) results = {} for _ in range(n): opponent, vasya_score, opponent_score = input().split() vasya_score, opponent_score = int(vasya_score), int(opponent_score) if vasya_score > opponent_score: results[opponent] = results.get(opponent, 0) + 1 sorted_results = sorted(results.items(), key=lambda item: (calculate_win_percentage(item[1], n), item[0])) print(len(sorted_results)) for opponent, wins in sorted_results: win_percentage = calculate_win_percentage(wins, n) print(f"{opponent} {win_percentage:.10f}") if __name__ == "__main__": main()

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

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос