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 scanner = new Scanner(System.in);
		
		for(; scanner.hasNext();)
		{
			float[] x = new float[4];
			float[] y = new float[4];
			
			for(int i=0; i<4; i++)
			{
				x[i] = scanner.nextFloat();
				y[i] = scanner.nextFloat();
			}
				
			String output = "NO";
			for(int i=0; i<4; i++)
			{
				float px, py;
				switch(i)
				{
					case 0:
						px = x[0];
						py = y[0];
						break;
					case 1:
						px = x[0];
						py = y[1];
						break;
					case 2:
						px = x[1];
						py = y[0];
						break;
					default:
						px = x[1];
						py = y[1];
						break;
				}
				if((x[2]<=px && px<=x[3]) && (y[2]<=py && py<=y[3]))
				{
					output = "YES";
					break;
				}
			}
			
			for(int i=0; i<4; i++)
			{
				float px, py;
				switch(i)
				{
					case 0:
						px = x[2];
						py = y[2];
						break;
					case 1:
						px = x[2];
						py = y[3];
						break;
					case 2:
						px = x[3];
						py = y[2];
						break;
					default:
						px = x[3];
						py = y[3];
						break;
				}
				if((x[0]<=px && px<=x[1]) && (y[0]<=py && py<=y[1]))
				{
					output = "YES";
					break;
				}
			}
		
			System.out.println(output);
		}
	}
}