直角三角形 (Standard IO)
2016-08-11 21:17
309 查看
题意/Description:
平面上给定N个两两不同的整点,统计以给定的点为顶点,且直角边平行于坐标轴的直角三角形数。
读入/Input:
输入文件right.in第一行为一个整数N。
以下N行,每行给出一个点的坐标。
输出/Output:
输出文件名为right.out。输出一个整数表示统计结果。
题解/solution:
枚举直角顶点(x,y),设横坐标为x的点有a个,纵坐标为y的点有b个。那么对答案的贡献为(a-1) * (b-1)。a和b可以事先全部统计出来,最后累加统计。
代码/Code:
const
maxn=137127;
var
n,ans:longint;
a,b,x,y,xnum,dx,ynum,dy:array [0..maxn] of longint;
function hashx(o:longint):longint;
var
i:longint;
begin
i:=o mod maxn;
while (x[i]<>0) and (x[i]<>o) do
i:=i mod maxn+1;
exit(i);
end;
function hashy(o:longint):longint;
var
i:longint;
begin
i:=o mod maxn;
while (y[i]<>0) and (y[i]<>o) do
i:=i mod maxn+1;
exit(i);
end;
procedure init;
var
i,o,p,numx,numy:longint;
begin
readln(n);
numx:=0; numy:=0;
for i:=1 to n do
begin
readln(a[i],b[i]);
o:=hashx(b[i]);
if x[o]<>b[i] then
begin
inc(numx);
xnum[o]:=numx;
inc(dx[xnum[o]]);
x[o]:=b[i];
end else inc(dx[xnum[o]]);
p:=hashy(a[i]);
if y[p]<>a[i] then
begin
inc(numy);
ynum[p]:=numy;
inc(dy[ynum[p]]);
y[p]:=a[i];
end else inc(dy[ynum[p]]);
end;
ans:=0;
end;
procedure main;
var
i:longint;
begin
for i:=1 to n do
ans:=(dx[xnum[hashx(b[i])]]-1)*(dy[ynum[hashy(a[i])]]-1)+ans;
write(ans);
end;
begin
init;
main;
end.
平面上给定N个两两不同的整点,统计以给定的点为顶点,且直角边平行于坐标轴的直角三角形数。
读入/Input:
输入文件right.in第一行为一个整数N。
以下N行,每行给出一个点的坐标。
输出/Output:
输出文件名为right.out。输出一个整数表示统计结果。
题解/solution:
枚举直角顶点(x,y),设横坐标为x的点有a个,纵坐标为y的点有b个。那么对答案的贡献为(a-1) * (b-1)。a和b可以事先全部统计出来,最后累加统计。
代码/Code:
const
maxn=137127;
var
n,ans:longint;
a,b,x,y,xnum,dx,ynum,dy:array [0..maxn] of longint;
function hashx(o:longint):longint;
var
i:longint;
begin
i:=o mod maxn;
while (x[i]<>0) and (x[i]<>o) do
i:=i mod maxn+1;
exit(i);
end;
function hashy(o:longint):longint;
var
i:longint;
begin
i:=o mod maxn;
while (y[i]<>0) and (y[i]<>o) do
i:=i mod maxn+1;
exit(i);
end;
procedure init;
var
i,o,p,numx,numy:longint;
begin
readln(n);
numx:=0; numy:=0;
for i:=1 to n do
begin
readln(a[i],b[i]);
o:=hashx(b[i]);
if x[o]<>b[i] then
begin
inc(numx);
xnum[o]:=numx;
inc(dx[xnum[o]]);
x[o]:=b[i];
end else inc(dx[xnum[o]]);
p:=hashy(a[i]);
if y[p]<>a[i] then
begin
inc(numy);
ynum[p]:=numy;
inc(dy[ynum[p]]);
y[p]:=a[i];
end else inc(dy[ynum[p]]);
end;
ans:=0;
end;
procedure main;
var
i:longint;
begin
for i:=1 to n do
ans:=(dx[xnum[hashx(b[i])]]-1)*(dy[ynum[hashy(a[i])]]-1)+ans;
write(ans);
end;
begin
init;
main;
end.
相关文章推荐
- 直角三角形 (Standard IO)
- 【NOIP2011模拟9.1】直角三角形 (Standard IO)
- java-第十三章-类的无参方法(一)-根据三角形的三条边长,判断是直角,锐角还是钝角三角形
- IO之Standard I_O实验(二)
- 判断直角三角形问题
- 纯css画直角三角形
- 3929. 【NOIP2014模拟11.6】创世纪 (Standard IO)
- 【Java每日编程题01】实现一个方法,接收一个层数值n,打印一个有n层的直角三角形,并返回底边最后一个值。并打印出来。
- 【NOIP2014八校联考第3场第1试10.4】规避(path) (Standard IO)
- YL杯超级篮球赛 (Standard IO)
- 竞赛排名 (Standard IO)
- 【接近直角三角形的三角形】CodeForce 18A ——Triangle
- NOI-CCF 1123. A-B (Standard IO)
- 直角三角形的判定
- 最大正方形 (Standard IO)
- 3066. 【NOIP2012模拟10.29晚】麻将 (Standard IO)
- 判断输入的3个数值,可以组成哪种三角形(等腰、直角、等边)或者不能组成三角形
- 【HNOI2013】游走 (Standard IO)高斯消元
- 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形。 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。 求满足这个条件的不同直角三角形的个数。
- 1153. 素数环 (Standard IO)