记录编号 |
7974 |
评测结果 |
AWWWWTTTTA |
题目名称 |
工作分配 |
最终得分 |
20 |
用户昵称 |
elysian |
是否通过 |
未通过 |
代码语言 |
Pascal |
运行时间 |
4.636 s |
提交时间 |
2008-11-12 16:23:49 |
内存使用 |
7.74 MiB |
显示代码纯文本
program elysian;
const
fin='divide.in';fout='divide.out';
var
f1,f2:text;
n,k,c,m:longint;
a,f:array[0..1000000] of longint;
procedure init;
var
i:longint;
begin
assign(f1,fin);reset(f1);
readln(f1,n,k,c);
for i:=1 to n do
read(f1,a[i]);
close(f1);
end;
procedure qsort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div 2];
repeat
while a[i]<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
j:=j-1;
end;
until i>j;
if l<j then
qsort(l,j);
if i<r then
qsort(i,r);
end;
procedure main;
var
i,j:longint;
begin
if k=1 then f[k]:=c
else f[k]:=c+(a[k]-a[1])*(a[k]-a[1]);
for i:=k+1 to n do
begin
f[i]:=c+(a[i]-a[1])*(a[i]-a[1]);
for j:=i-k downto k do
if f[j]+c+(a[i]-a[j+1])*(a[i]-a[j+1])<f[i] then f[i]:=f[j]+c+(a[i]-a[j])*(a[i]-a[j+1]);
end;
assign(f2,fout);rewrite(f2);
writeln(f2,f[n]);
end;
begin
init;
qsort(1,n);
main;
close(f2);
end.