Problem:
長方形の重なり

底辺が x 軸に対して平行な 2 つの長方形があります。長方形 A の左下の座標 (xa1, ya1) と右上の座標 (xa2, ya2)、長方形 B の左下の座標 (xb1, yb1) と右上の座標 (xb2, yb2) を読み込んで、長方形 A と長方形 B が一部でも重なっていれば YES を、まったく重なっていなければ NO を出力するプログラムを作成してください。ただし、長方形 A と長方形 B は同じものではないとします。また、接しているものも重なっているとみなします。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです。

xa1 ya1 xa2 ya2 xb1 yb1 xb2 yb2

入力される値はそれぞれ -2,000 以上 2,000 以下であり、各値は小数点以下最大 5 桁までの数字を含む実数で与えられます。

データセットの数は 50 を超えません。

Output

各データセットに対して、YES または NO を１行に出力して下さい。

Sample Input

0.0 0.0 5.0 5.0 1.0 1.0 4.0 4.0
0.0 0.0 4.0 5.0 1.0 1.0 5.0 5.0
0.0 0.0 4.0 4.0 -3.0 -5.0 2.0 -1.0

Output for the Sample Input

YES
YES
NO

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			double xa1 = sc.nextDouble();
			double ya1 = sc.nextDouble();
			double xa2 = sc.nextDouble();
			double ya2 = sc.nextDouble();
			double xa3 = xa2;
			double ya3 = ya1;
			double xa4 = xa1;
			double ya4 = xa2;
			double xb1 = sc.nextDouble();
			double yb1 = sc.nextDouble();
			double xb2 = sc.nextDouble();
			double yb2 = sc.nextDouble();
			double xb3 = xb2;
			double yb3 = yb1;
			double xb4 = xb1;
			double yb4 = yb2;
			double[] xa = {xa1, xa2, xa3, xa4};
			double[] ya = {ya1, ya2, ya3, ya4};
			double[] xb = {xb1, xb2, xb3, xb4};
			double[] yb = {yb1, yb2, yb3, yb4};
			boolean flag = true;
			for(int i = 0; i < 4; i++) {
				if(xa1 <= xb[i] && xb[i] <= xa2 && ya1 <= yb[i] && yb[i] <= ya2) {
					flag = false;
					System.out.println("YES");
					break;
				}
				if(xb1 <= xa[i] && xa[i] <= xb2 && yb1 <= ya[i] && ya[i] <= yb2) {
					flag = false;
					System.out.println("YES");
					break;
				}
			}
			if(flag) {
				System.out.println("NO");
			}
		}
		sc.close();
	}
}