直角三角形 紀中 1385 數學 斜率

2021-07-14 20:10:19 字數 2755 閱讀 9110

二維平面座標系中有n個點。

從n個點選擇3個點,問有多少選法使得這3個點形成直角三角形。

第一行包含乙個整數n(3<=n<=1500),表示點數。

接下來n行,每行包含兩個用空格隔開的整數表示每個點的座標,座標值在-10^9到10^9之間。

每個點位置互不相同。

輸出直角三角形的數量。

輸入1:

4 22 1

1 3輸入2:

5 02 6

8 65 7

輸入3:

-1 1

-1 0

0 01 0

1 1輸出1:

輸出2:

輸出3:

這個解釋起來比較麻煩,請自己看英文或**。英文題解

大概就是列舉乙個點和別的點連邊,然後算這條線的斜率(見斜率)。

然後就把斜率排序,列舉可能垂直的兩條的邊(可以用乙個性質,垂直的兩條邊的斜率乘積為-1),就可以了。

const max=1500;

type

ray=record

dx,dy:int64;

jpwang:longint;

end;

var i,j,k,n:longint;

x:array[1..max] of longint;

y:array[1..max] of longint;

g:array[1..max] of ray;

temp:array[1..max] of ray;

num:array[0..3] of longint;

ans:longint;

procedure

turn

(var r:ray);

var temp:int64;

begin

temp:=r.dx;

r.dx:=r.dy;

r.dy:=-temp;

r.jpwang:=(r.jpwang+1) mod

4;end;

procedure

qsort

(lo,hi:longint);

var mid:longint;

i,j,k:longint;

begin

if lo<>hi

then

begin

mid:=(lo+hi) div

2; qsort(lo,mid);

qsort(mid+1,hi);

i:=lo;

j:=mid+1;

k:=lo;

while (i<=mid) and (j<=hi) do

begin

if g[i].dy*g[j].dxthen

begin

temp[k]:=g[i];

i:=i+1;

endelse

begin

temp[k]:=g[j];

j:=j+1;

end;

k:=k+1;

end;

while i<=mid do

begin

temp[k]:=g[i];

i:=i+1;

k:=k+1;

end;

while j<=hi do

begin

temp[k]:=g[j];

j:=j+1;

k:=k+1;

end;

for i:=lo to hi do

g[i]:=temp[i];

end;

end;

begin

readln(n);

for i:=1

to n do

readln(x[i],y[i]);

ans:=0;

for i:=1

to n do

begin

for j:=1

to n do

begin

g[j].jpwang:=0;

g[j].dx:=x[j]-x[i];

g[j].dy:=y[j]-y[i];

if i=j

then

begin

g[j].jpwang:=g[1].jpwang;

g[j].dx:=g[1].dx;

g[j].dy:=g[1].dy;

endelse

while

not ((g[j].dx>0) and (g[j].dy>=0)) do

turn(g[j]);

end;

qsort(2,n);

j:=2;

while j<=n do

begin

fillchar(num,sizeof(num),0);

k:=j;

while (k<=n) and (g[j].dy*g[k].dx=g[k].dy*g[j].dx) do

begin

num[g[k].jpwang]:=num[g[k].jpwang]+1;

k:=k+1;

end;

j:=k;

ans:=ans+num[0]*num[1];

ans:=ans+num[1]*num[2];

ans:=ans+num[2]*num[3];

ans:=ans+num[3]*num[0];

end;

end;

writeln(ans);

end.

正直角三角形

在平面直角座標系的第一象限內有m個點。正直角三角形 是一種奇特的三角形,它的三個頂點分別在原點 x軸的正方向和y軸的正方向。請用乙個面積最小的 正直角三角形 將這些點全部圍住,求解面積的大小。題目中所有的座標 包括正直角三角形的頂點座標 都為整數。input 1 m,xi,yi 100 每行乙個答案...

JZ高中OJ 1385 直角三角形

time limits 4000 ms memory limits 65536 kb detailed limits description 二維平面座標系中有n個點。從n個點選擇3個點,問有多少選法使得這3個點形成直角三角形。input 第一行包含乙個整數n 3 n 1500 表示點數。接下來n行...

模擬 直角三角形

平面上給定n個兩兩不同的整點,統計以給定的點為頂點,且直角邊平行於座標軸的直角三角形數。輸入格式 輸入檔案right.in第一行為乙個整數n。以下n行,每行給出乙個點的座標。輸出格式 輸出檔名為right.out。輸出乙個整數表示統計結果。輸入樣例 1 0 0 0 11 0 1 1 輸出樣例 1 4...