题目输入一个n,接下来有n组数据,每组数据是n个point(x,y);输出xi == xj || yi == yj的数量,注意要减去xi == xj && yi == yj的数量
代码如下,写的复杂的原因是因为想练习一下HashMap
import java.awt.Point;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
HashMap<Integer,Long> xs = new HashMap<>();
HashMap<Integer,Long> ys = new HashMap<>();
HashMap<Point,Long> locs = new HashMap<>();
int n = input.nextInt();
for(int i = 0;i < n;i++){
int x = input.nextInt();
int y = input.nextInt();
Point p = new Point(x, y);
Long cx = (long) 0,cy = (long) 0,cp = (long) 0;
if(xs.containsKey(x)){
cx = xs.get(x);
}
if(ys.containsKey(y)){
cy = ys.get(y);
}
if(locs.containsKey(p)){
cp = locs.get(p);
}
cx++;
cy++;
cp++;
xs.put(x, cx);
ys.put(y, cy);
locs.put(p, cp);
}
Iterator ite = xs.keySet().iterator();
long ans = 0;
while(ite.hasNext()){
int l = (int) ite.next();
ans += (xs.get(l)-1) * xs.get(l) / 2;
}
ite = ys.keySet().iterator();
while(ite.hasNext()){
int l = (int) ite.next();
ans += (ys.get(l)-1) * ys.get(l) /2;
}
ite = locs.keySet().iterator();
while(ite.hasNext()){
Point l = (Point)ite.next();
ans -= locs.get(l) *(locs.get(l)-1) / 2 ;
}
System.out.println(ans);
}
}
本文介绍了一个使用Java实现的点坐标统计程序。该程序接收一组点坐标数据,通过使用HashMap来统计相同横纵坐标的出现次数,并计算出仅横坐标或纵坐标相同的点对数量。文章中的代码展示了如何有效地组织数据并进行统计,适用于需要处理大量坐标数据的场景。
2729

被折叠的 条评论
为什么被折叠?



