На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат:
<Фамилия> <Инициалы> <номер школы>,
где <Фамилия> — строка, состоящая не более чем из 20 символов,
<Инициалы> — строка, состоящая из 4-х символов (буква, точка, буква, точка),
<номер школы> — не более чем двузначный номер.
<Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом.
Пример входной строки:
Иванов П. С. 57
Требуется написать как можно более эффективную программу на Паскале, которая определяет среднее количество участников олимпиады из одной школы. Следует учитывать, что N > 1000.
Программа верно читает входные данные, не запоминая их все, а сразу подсчитывая в массиве, хранящем 99 целых чисел согласно номерам школ, количество участников олимпиады из каждой школы. Затем подсчитывается количество школ, приславших хотя бы одного участника, и вычисляется среднее количество участников от одной школы.
var nc:array[1..99] of integer;
р:1..99;
с:char;
i, k, N: integer;
begin
readln(N) ;
for i:=1 to 99 do nc[i]:=0;
for i:=1 to N do
begin
repeat
read(с)
until c=' '; {считана фамилия}
repeat
read(c)
until c=' ';
repeat
read(c)
until c=' '; {считаны инициалы}
readln(p);
nc[p]:=nc[p]+1 ;
end;
k: = 0 ;
for i:=1 to 99 do
if nc[i]>0 then k:=k+1;
writeln('Среднее количество участников из одной школы', N/k)
end.


Предлагаю более простой способ считать номер школы:
readln(N) ;
for i:=1 to N do
begin
readln(s);
x:=Copy(s, length(s)-1, 2); {Копируем 2 последних символа - номер школы}
t:=StrToInt(x);
Num[t]:=Num[t]+1; {К кол-ву учеников школы номер t прибавляем 1}
end....