// PascalABC.NET 3.3, сборка 1627 от 27.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadlnInteger; if not n.InRange(10,100) then begin Writeln('Ожидалось значение от 10 до 100'); exit end; var famh,namh,faml,naml:string; var (hball,lball):=(-1.0,16.0); loop n do begin var a:=ReadlnString.ToWords; var avg:=(a[2].ToReal+a[3].ToReal+a[4].ToReal)/3; if avg>hball then (famh,namh,hball):=(a[0],a[1],avg) else if avg<lball then (faml,naml,lball):=(a[0],a[1],avg) end; Writeln; Println('Лучший',famh,namh); Println('Худший',faml,naml) end.
Ребятам уже встречалась подобная задача (см. комментарии к задаче 18). Здесь, так же как и в задаче 18, нужно экономить вершины, т. е. не размещать на одном уровне две одинаковые вершины, имеющие общую предыдущую (или две одинаковые корневые вершины). Исключение из этого правила составляет лишь случай, когда одна из одинаковых вершин является листом, а другая – нет. Например, в мешке V есть слова КИС и КИСА. У этих путей будут две общие вершины – К и И. Однако бусины С этих путей будут разными вершинами дерева.
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadlnInteger;
if not n.InRange(10,100) then begin
Writeln('Ожидалось значение от 10 до 100');
exit
end;
var famh,namh,faml,naml:string;
var (hball,lball):=(-1.0,16.0);
loop n do begin
var a:=ReadlnString.ToWords;
var avg:=(a[2].ToReal+a[3].ToReal+a[4].ToReal)/3;
if avg>hball then (famh,namh,hball):=(a[0],a[1],avg)
else
if avg<lball then (faml,naml,lball):=(a[0],a[1],avg)
end;
Writeln;
Println('Лучший',famh,namh);
Println('Худший',faml,naml)
end.