Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

凸？

平面上の異なる 4 点　$A (x_a, y_a)$, $B (x_b, y_b)$, $C (x_c, y_c)$, $D(x_d, y_d)$ の座標を読み込んで、それら 4 点を頂点とした四角形 $ABCD$ に凹みがなければ YES、凹みがあれば NO と出力するプログラムを作成してください。

凹みのある四角形とは図 1 のような四角形です。

Input

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

$x_a$,$y_a$,$x_b$,$y_b$,$x_c$,$y_c$,$x_d$,$y_d$

$x_a$, $y_a$, $x_b$, $y_b$, $x_c$, $y_c$, $x_d$, $y_d$ はそれぞれ -100 以上 100 以下であり、実数で与えられます。

1 直線上に 3 つ以上点が並ぶことはないものとします。また、入力順に点を結んでいけば、四角形になる順番に点の座標が入力されるものとします。（つまり、図 2 のような形になる順番で点が与えられることはありません。)

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

Output

各データセットごとに、YES または NO を１行に出力します。

Sample Input

0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0
0.0,0.0,3.0,0.0,1.0,1.0,1.0,3.0

Output for the Sample Input

YES
NO

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = "";

		while ((line = br.readLine()) != null) {
			
			double[][] p = new double[4][2];

			int i = 0;
			for (String s : line.split(",")) {
				switch (i) {
				case 0:
					p[0][0] = Double.parseDouble(s);
					break;
				case 1:
					p[0][1] = Double.parseDouble(s);
					break;
				case 2:
					p[1][0] = Double.parseDouble(s);
					break;
				case 3:
					p[1][1] = Double.parseDouble(s);
					break;
				case 4:
					p[2][0] = Double.parseDouble(s);
					break;
				case 5:
					p[2][1] = Double.parseDouble(s);
					break;
				case 6:
					p[3][0] = Double.parseDouble(s);
					break;
				case 7:
					p[3][1] = Double.parseDouble(s);
					break;
				}
				i++;
			}
			boolean isConvex = true;
			for (int j = 0; j < 4; j++) {
				// line1: 隣接する座標との線分を合成した線分の長さの 1/2
				// line2: 隣接しない座標との線分の長さ
				double line1, line2;
				switch (j) {
				case 0:
					line1 = (getLenght(p[0], p[1]) + getLenght(p[0], p[3])) / 2;
					line2 = getLenght(p[0], p[2]);
					isConvex &= (line2 > line1 ? true : false);
					break;
				case 1:
					line1 = (getLenght(p[1], p[2]) + getLenght(p[1], p[0])) / 2;
					line2 = getLenght(p[1], p[3]);
					isConvex &= (line2 > line1 ? true : false);
					break;
				case 2:
					line1 = (getLenght(p[2], p[3]) + getLenght(p[2], p[1])) / 2;
					line2 = getLenght(p[2], p[0]);
					isConvex &= (line2 > line1 ? true : false);
					break;
				case 3:
					line1 = (getLenght(p[3], p[0]) + getLenght(p[3], p[2])) / 2;
					line2 = getLenght(p[3], p[1]);
					isConvex &= (line2 > line1 ? true : false);
					break;
				}
			}
			if (isConvex)
				System.out.println("YES");
			else
				System.out.println("NO");
		}
	}

	public static double getLenght(double[] p1, double[] p2) {
		return Math.sqrt(Math.pow(p1[0] - p2[0], 2)
				+ Math.pow(p1[1] - p2[1], 2));
	}
}