Codeforces #14(div2) C "Four Segments"

問題:http://codeforces.com/contest/14/problem/C

(あとがきうろ覚え)
それぞれが違う点かどうかを判定し,任意の点において
x軸,y軸方向それぞれに平行な点かどうかを判定.

本番でミスってたのは平行な点の判定のときにSetのままだったために
順番が定まっておらず,変な点と比較してたっぽい.

import java.awt.Point;
import java.util.*;

public class C_FourSegments {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Map<Point, Set<Point>> corners = new HashMap<Point, Set<Point>>();
		for (int n = 4; n-- > 0;) {
			Point p1 = new Point(scan.nextInt(), scan.nextInt());
			Point p2 = new Point(scan.nextInt(), scan.nextInt());

			if(!corners.containsKey(p1))
				corners.put(p1, new HashSet<Point>());
			corners.get(p1).add(p2);
			if(!corners.containsKey(p2))
				corners.put(p2, new HashSet<Point>());
			corners.get(p2).add(p1);
		}

		if (corners.keySet().size() != 4) {
			System.out.println("NO"); return;
		}
		for(Point p : corners.keySet()){
			List<Point> lines = new ArrayList<Point>(corners.get(p));
			if(lines.size()!=2){
				System.out.println("NO"); return;	
			}
			Point p1 = lines.get(0), p2 = lines.get(1);
			if(!((p.x==p1.x&&p.y==p2.y)||(p.y==p1.y&&p.x==p2.x))){
				System.out.println("NO"); return;	
			}
		}
		System.out.println("YES");
	}
}