На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Инициалы> <номер школы>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> - не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:
Иванов П. С. 57
Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы (школ) было больше всего участников олимпиады.
##Приведём решение на языке Pascal.
var nс:аrrау[1..99] of integer;
р:1..99;
с: char;
i, N, max: integer;
begin
readln(N);
for i:=l to 99 do nc[i]:=0;
for i:=l to N do
begin
repeat
read(c)
until с=' ';
repeat
read(c)
until с=' ';
readln(p);
nc[p]:=nc[p]+1;
end;
max:=0;
for i:=1 to 99 do
if nc[i]>0 then
if nc[i]>max then max:=nc[i];
for i:=l to 99 do
if nc[i]=max then writeln(i);
readln
end.
Приведём решение Сергея Донец на языке PascalABC.NET.
var schoolCount := new Dictionary<integer, integer>;
begin
var N:=ReadlnInteger;
for var i := 1 to N do
begin
var line := ReadlnString;//Иванов П. С. 57
var school := line.Split(' ').Where(x -> x <> '').Last.ToInteger;
if schoolCount.ContainsKey(school)
then schoolCount[school] += 1
else schoolCount[school] := 1;
end;
var mx := schoolCount.Values.Max;
schoolCount
.Where(p -> p.Value = mx)
.Select(p -> p.Key)
.OrderBy(x -> x)
.PrintLines;
end.

