Даю 55 баллов! Решите задачу: Вася — учитель физкультуры в школе. В отличие от других учителей физкультуры, Вася не любит когда ученики выстраиваются в шеренгу по росту. Вместо этого, он требует, чтобы дети выстраивались в поря...

Даю 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.
Гость
Ответ(ы) на вопрос:
Гость
//прога на 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.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы