讨论 / 有3个测试数据通不过,为什么?
zhenghan2 2011-10-29 00:11:00
点我顶贴 收藏 删除
program aa;

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个?我还少了什么判断么?

#1 方子健@2010-07-28 02:14:00
回复 删除
测试数据有问题 嘿嘿
#2 wsxtyrdd2009@2010-07-28 02:21:00
回复 删除
试试这个

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.

#3 zhenghan2@2010-07-30 01:53:00
回复 删除
我就是不知道我哪里错了..
#4 zhouyi@2011-10-29 00:11:00
回复 删除
自己做,别看别人的,别指望别人。要是这是考试咋办?自己做,不然就没意义了,那做它干吗?看别人,指望别人有啥好处?不就是个排名吗?我排名不高,但我诚实守信!!!!
查看更多回复
提交回复