var n,k:integer;
a,f:array [1..5000] of longint;
function min(x,y:longint):longint;
begin
if x>y then exit(y)
else exit(x);
end;
function max(x,y:integer):integer;
begin
if x>y then exit(x)
else exit(y);
end;
procedure swap(var x,y:longint);
var z:longint;
begin
z:=x;
x:=y;
y:=z;
end;
procedure init;
var i:integer;
begin
for i:=1 to n do
begin
f[i]:=maxint;
readln(a[i]);
end;
if a[1]>a[n] then
for i:=1 to n div 2 do
swap(a[i],a[n-i+1]);
end;
function getk(x,y:integer):real;
begin
getk:=(a[x]-a[y])/(x-y);
end;
procedure main;
var i,j:integer;
k1,k2:real;
begin
f[1]:=1;
for i:=2 to n do
begin
k2:=maxlongint;
for j:=i-1 downto max(i-k,1) do
if a[j]<=a[i] then
begin
k1:=getk(i,j);
if k1-k2<1e-5 then
begin
f[i]:=min(f[i],f[j]+1);
k2:=k1;
end;
end else break;
end;
writeln(f[n]);
end;
begin
readln(n,k);
init;
main;
end.
把k1-k2<1e-5那个if条件判断里的k2:=k1放到外面一层,但是这样改了还是有问题,(依旧全输出32767),为什么?
if a[1]>a[n] then
for i:=1 to n div 2 do
swap(a[i],a[n-i+1]);
我查过题解,和我的几乎一样,但为什么我的全是maxint??
晕ing @v@