Var arnx,armx,arny,army,delMmax:array[1..1000] of real; N,M,res,i,j:integer; min:real; begin min:=maxreal; {не уверен существует ли эта константа в fpc, если что, она равна максимальному значению типа real} readln(N); for i:=1 to N do readln(arnx[i],arny[i]); readln(M); for i:=1 to M do begin readln(armx[i],army[i]); delMmax[i]:=-1; for j:=1 to N do if delMmax[i]<sqrt(sqr(armx[i]-arnx[j])+sqr(army[i]-arny[j])) then delMmax[i]:=sqrt(sqr(armx[i]-arnx[j])+sqr(army[i]-arny[j])); if delMmax[i]<min then begin min:=delMmax[i]; res:=i; end; end; writeln(res); end.
Пример ввода: 3 2 1 1 2 1 1 3 1 5 3 3 4 2 Пример вывода: 2
Если разрисовывать варианты составления слов, то на рисунке получится древовидная структура, со множеством разветвлений (это я показал на рисунке, для первых двух этапов).
Начало- пункт старт.
1) Выбираем первую букву: от пункта старт идут пять ответвлений- по количеству букв, которые можно поставить на первое место в слове (буквы АГЖФЯ -в каждом ответвлении мы выбираем одну из них).
2) Выбираем вторую букву: от каждой буквы первого этапа идут по четыре ответвления (ведь одну букву мы уже использовали, поставив её на первое место, теперь у нас остаётся четыре буквы; в каждом ответвлении мы выбираем одну из них). Получается, у нас было пять начальных вариантов, и каждый из них разветвился ещё на четыре варианта- то есть было пять вариантов, а стало в четыре раза больше (5*4=20 вариантов).
3) Выбираем третью букву: от каждой буквы второго этапа идут по три ответвления. Получается 5*4*3=60 вариантов.
Это и есть число возможных трёхбуквенных слов- 60. Для каждого из этих слов в дереве есть отдельный путь от пункта старт до выбора третьей буквы.
Рисовать всё дерево вариантов не обязательно, ведь оно весьма большое. Достаточно понять принцип, как оно строится, и как посчитать число вариантов.
Var
arnx,armx,arny,army,delMmax:array[1..1000] of real;
N,M,res,i,j:integer;
min:real;
begin
min:=maxreal;
{не уверен существует ли эта константа в fpc, если что, она равна максимальному значению типа real}
readln(N);
for i:=1 to N do
readln(arnx[i],arny[i]);
readln(M);
for i:=1 to M do
begin
readln(armx[i],army[i]);
delMmax[i]:=-1;
for j:=1 to N do
if delMmax[i]<sqrt(sqr(armx[i]-arnx[j])+sqr(army[i]-arny[j]))
then
delMmax[i]:=sqrt(sqr(armx[i]-arnx[j])+sqr(army[i]-arny[j]));
if delMmax[i]<min
then
begin
min:=delMmax[i];
res:=i;
end;
end;
writeln(res);
end.
Пример ввода:
3
2 1
1 2
1 1
3
1 5
3 3
4 2
Пример вывода:
2