noip2006能量项链

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:55:55
大家看看哪错了,谢谢~~~~~
代码如下:
program energy;
var
f1,f2:text;
f:array[1..200,1..200]of longint;
w,w1:array[1..200]of integer;
i,j,k,p,n:integer;
maxi:longint;

procedure sort(l,r:integer);{排序}
var
mid,tem:integer;
Begin
i:=l;
j:=r;
mid:=w[(l+r)div 2];
repeat
while w[i]<mid do inc(i);
while w[j]>mid do dec(j);
if not(i>j)then
begin
tem:=w[i];
w[i]:=w[j];
w[j]:=tem;
inc(i);
dec(j);
end;
until j<i;
if i<r then sort(i,r);
if j>l then sort(l,j);
End;

BEGIN
assign(f1,'energy.in');
reset(f1);
readln(f1,n);
for i:=1 to n do
read(f1,w[i]);
close(f1);
sort(1,n);
for i:=1 to n do
w[i+n]:=w[i];
for i:=1 to 2*n-1 do
w1[i]:=w[i];
w1[2*n]:=w[1];

问题如下:
1、此题根本无需排序,而且排序会导致错误。例如一组数据2 5 3 7,四颗珠子应该分别为(2,5)(5,3)(3,7)(7,2),用过sort后变成2 3 5 7,此时的珠子为(2,3)(3,5)(5,7)(7,2),不对了。
2、数组w1如果作为尾标,存储错误。
for i:=1 to 2*n-1 do
w1[i]:=w[i];
w1[2*n]:=w[1];
这三行程序貌似有问题,第二行应该是"w1[i]:=w[i+1];"。

算法都是对的。