题目输入一个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);
}
}