
Kiasash
5 год назад
Даю 55 поинтов! Пожалуйста посчитайте задачу:Вася — учитель физкультуры в школе. В отличие от других учителей физкультуры, Вася не любит когда ученики выстраиваются в шеренгу по росту. Вместо этого, он требует, чтобы дети выстраивались в порядке a1, a2, ..., an, где ai — рост i-го ученика в шеренге, а n — количество учеников в шеренге. Детям сложно запомнить этот странный порядок, и сегодня они выстроились в порядке b1, b2, ..., bn, что очень расстроило Васю. Теперь Вася хочет переставить детей так, чтобы получился порядок a1, a2, ..., an. За одно действие Вася может поменять местами двух человек, стоящих подряд в шеренге. Пожалуйста посчитайте Васе — составьте последовательность обменов, приводящую к нужной Васе расстановке. Количество действий минимизировать не требуется.Входные данныеВ первой строке записано целое число n (1 ≤ n ≤ 300) — количество учеников. Во второй строке через пробел записано n целых чисел ai (1 ≤ ai ≤ 109) — какой рост должен иметь ученик на месте i. В третьей строке через пробел записано n целых чисел bi (1 ≤ bi ≤ 109) — какой рост имеет ученик на месте i в начальной расстановке. Возможно, что некоторые ученики имеют одинаковый рост. Гарантируется, что расставить детей в требуемом порядке возможно, т. е. a и b совпадают как мультимножества.Выходные данныеВ первой строке выведите целое число k (0 ≤ k ≤ 106) — количество действий. Минимизировать k не требуется, но оно не должно превосходить 106. Далее выведите k строк по два целых числа через пробел. Строка pi, pi + 1 (1 ≤ pi ≤ n - 1) означает, что Вася должен поменять местами учеников на местах pi и pi + 1.
ОТВЕТЫ

Мартьян
Oct 24, 2020
//прога на Pascal`e
var
n,i,j,f,q,k:longint;
x,y,b,a:Array[0..30000] of longint;
begin
read(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do read(b[i]);
for i:=1 to n do
begin
for j:=i to n do
if a[i]=b[j] then
begin
f:=j;
break;
end;
for j:=f downto i+1 do
begin
q:=b[j];
b[j]:=b[j-1];
b[j-1]:=q;
inc(k);
x[k]:=j-1;
y[k]:=j;
end;
end;
writeln(k);
for i:=1 to k do
writeln(x[i],' ',y[i]);
end.
var
n,i,j,f,q,k:longint;
x,y,b,a:Array[0..30000] of longint;
begin
read(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do read(b[i]);
for i:=1 to n do
begin
for j:=i to n do
if a[i]=b[j] then
begin
f:=j;
break;
end;
for j:=f downto i+1 do
begin
q:=b[j];
b[j]:=b[j-1];
b[j-1]:=q;
inc(k);
x[k]:=j-1;
y[k]:=j;
end;
end;
writeln(k);
for i:=1 to k do
writeln(x[i],' ',y[i]);
end.
221
Смежные вопросы: