var n,i,s,num:integer;
a:array[0..100] of integer;
b:array[0..100] of integer;
x,y:array[0..20000] of real;
procedure cac(k:integer; var s:integer);
var i,t:integer;
begin
for i:=k+1 to n do
begin
if a[k]=a[i] then continue;
inc(s);
x[s]:=(b[i]-b[k])/(a[k]-a[i]);
y[s]:=a[k]*x[s]+b[k];
end;
end;
procedure qsort(l,r:integer);
var i,j,mid:integer;
t:real;
begin
i:=l;j:=r;mid:=(i+j) div 2;
repeat
while x[i]<x[mid] do inc(i);
while x[j]>x[mid] do dec(j);
if i<=j then
begin
t:=x[i];
x[i]:=x[j];
x[j]:=t;
t:=y[i];
y[i]:=y[j];
y[j]:=t;
inc(i);dec(j);
end;
until i>j;
if j>l then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
s:=0;
read(n);
for i:=1 to n do
read(a[i],b[i]);
for i:=1 to n do
cac(i,s);{计算坐标}
if s=0 then begin write('No Fire Point.');halt;end;
qsort(1,s);{坐标排序}
i:=1;
num:=0;
repeat
inc(num);
if (x[i]=x[i-1]) and (y[i]=y[i-1]) then dec(s);
inc(i);
until i>s;{计算个数}
if num>0 then
write(num) else write('No Fire Point.');
end.
这3个点是怎么回事
测试结果错误.错误结果为:23
正确结果应为:1
测试结果错误.错误结果为:4926
正确结果应为:4925
测试结果错误.错误结果为:4926
正确结果应为:4923
为什么第一个点差了22个?我还少了什么判断么?
type q=record
a,b,c,d:integer;
end;
var j,t,i,n,s,z:integer;a:array[1..10000] of q; b:array[1..10000] of integer;
begin
read(n);
for i:=1 to n do
begin
a[i].a:=i;
read(a[i].b,a[i].c,a[i].d);
b[i]:=a[i].d+a[i].b+a[i].c;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if b[i]<b[j] then
begin
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=a[i].a;a[i].a:=a[j].a;a[j].a:=t;
t:=a[i].b;a[i].b:=a[j].b;a[j].b:=t;
end;
for i:=1 to n do
begin
for j:=i+1 to n do
begin
if b[i]=b[j] then
begin
if a[j].b>a[i].b then
begin
t:=a[j].b;a[j].b:=a[i].b;a[i].b:=t;
t:=b[j];b[j]:=b[i];b[i]:=t;
t:=a[j].a;a[j].a:=a[i].a;a[i].a:=t;
end;
if a[i].b=a[j].b then
begin
if a[j].a<a[i].a then
begin
t:=b[j];b[j]:=b[i];b[i]:=t;
t:=a[j].a;a[j].a:=a[i].a;a[i].a:=t;
end;
end;
end;
end;
end;
for i:=1 to 5 do
writeln(a[i].a,' ',b[i]);
end.