description
小d正在玩cs,喜歡思考的他看到無數子彈從他眼前飛過時想到了乙個奇怪的問題:這麼多子彈在空中飛來飛去,難道它們不會相撞嗎?當然這是可能的.小d把兩顆子彈軌跡相交的地方叫做」火力匯點」,顯然如果讓敵人站在火力匯點上那麼他將受到更嚴重的傷害.小d想知道平面上的所有火力匯點以便對敵人造成更重的打擊,但是小d數學很差,所以他找到了你,請你幫他計算出平面上所有火力匯點的座標.小d用直線來描述子彈的軌跡,這種子彈很特別,它發射後會迸裂成兩顆並沿相反方向飛行(汗!!那不是打自己),小d數學很差(已知),只會用直線的一般式表示每條直線y=kx+b.
input
n
k1 b1
k2 b2
......
kn bn
第一行乙個數n,表示直線數量
接下來n行,每行描述一條直線
output
乙個數,火力匯點的個數
若交點不存在請輸出no fire point. (結尾有小點哦)
sample input
2
1 0-1 2
sample output
1
題解
如果兩條直線有交點那麼就可以得到k1x+b1=k2x+b2如果x有解那麼就表示有交點。儲存下每個x和y最後排序判重。
**
var
n,nm:longint;
k,b:array [0..101] of longint;
a:array [0..10001,1..2] of real;
procedure
qsort
(l,r:longint);
var i,j:longint;
mid1,mid2:real;
begin
if l>r then
exit;
i:=l; j:=r;
mid1:=a[(l+r) div
2,1];
mid2:=a[(l+r) div
2,2];
repeat
while (a[i,1]or (a[i,1]=mid1) and (a[i,2]do inc(i);
while (a[j,1]>mid1) or (a[i,1]=mid1) and (a[i,2]do dec(j);
if i<=j then
begin
a[0]:=a[i]; a[i]:=a[j]; a[j]:=a[0];
inc(i); dec(j);
end;
until i>j;
qsort(i,r);
qsort(l,j);
end;
procedure
init;
var i,j,kx,bx:longint;
begin
readln(n);
for i:=1
to n do
readln(k[i],b[i]);
for i:=1
to n-1
dofor j:=i+1
to n do
begin
kx:=k[i]-k[j];
if kx=0
then
continue;
bx:=b[j]-b[i];
inc(nm);
a[nm,1]:=bx/kx;
a[nm,2]:=(k[i]*a[nm,1])+b[i];
end;
end;
procedure
main;
var i,mn:longint;
begin
mn:=nm;
for i:=2
to nm do
if (a[i,1]=a[i-1,1]) and( a[i,2]=a[i-1,2]) then dec(mn);
if mn=0
then writeln('no fire point.')
else writeln(mn);
end;
begin
init;
qsort(1,nm);
main;
end.
交匯的火力
description 小d正在玩cs,喜歡思考的他看到無數子彈從他眼前飛過時想到了乙個奇怪的問題 這麼多子彈在空中飛來飛去,難道它們不會相撞嗎?當然這是可能的.小d把兩顆子彈軌跡相交的地方叫做 火力匯點 顯然如果讓敵人站在火力匯點上那麼他將受到更嚴重的傷害.小d想知道平面上的所有火力匯點以便對敵人...
交匯的火力
題目描述 小d正在玩cs,喜歡思考的他看到無數子彈從他眼前飛過時想到了乙個奇怪的問題 這麼多子彈在空中飛來飛去,難道它們不會相撞嗎?當然這是可能的.小d把兩顆子彈軌跡相交的地方叫做 火力匯點 顯然如果讓敵人站在火力匯點上那麼他將受到更嚴重的傷害.小d想知道平面上的所有火力匯點以便對敵人造成更重的打擊...
火力電廠生產過程
發電廠是把各種動力能源的能量轉變成電能的工廠。根據所利用的能源形式可分為火力發電廠 水利發電廠 原子能發電廠 地熱發電廠 風力發電廠等。火力發電廠簡稱火電廠,是利用煤 石油 天然氣等燃料的化學能產生出電能的工廠。按其功用可分為兩類,即凝汽式電廠和熱電廠。前者僅向使用者 電能,而熱電廠除供給使用者電量...