球推荐好的初赛资料/kk
  • 板块学术版
  • 楼主CrTsIr400
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/10/9 12:17
  • 上次更新2023/11/5 11:29:31
查看原帖
球推荐好的初赛资料/kk
121995
CrTsIr400楼主2020/10/9 12:17

窝电脑上这个是P的

这道题的关键在于看出交换两个变量的块,以及jr, jw和jb的含义。整个过程有点像排序。

var
a : array [1..50] of integer;
n, i, sum : integer;
procedure work(p, r: integer);
var
i, j, temp : integer;
begin
if p < r then begin
i := p - 1;
for j := p to r - 1 do
if a[j] >= a[r] then begin
inc(i);
temp := a[i]; a[i] := a[j]; a[j] := temp;
end;
temp := a[i + 1]; a[i + 1] := a[r]; a[r] := temp;
work(p, i);
work(i + 2, r);
end;
end;

begin
read(n);
for i := 1 to n do read(a[i]);
work(1, n);
for i := 1 to n - 1 do sum := sum + abs(a[i + 1] - a[i]);
writeln(sum);
end.
输入:10 23 435 12 345 3123 43 456 12 32 -100
输出:3223
关键在于先看出work是快速排序,其次最后计算sum的时候化简。


2020/10/9 12:17
加载中...