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: Accepted)

import java.util.Scanner;

public class Main {
	private double[] pos = new double[8];

	public static void main(String[] args) {
		new Main().run();
	}
	
	private void run() {
		Scanner scan = new Scanner(System.in);
		while (scan.hasNext()) {
			String[] str = scan.nextLine().split(",");
			for (int i = 0; i < 8; i++) pos[i] = Double.parseDouble(str[i]);
			
			double sum = 0;
			for (int i = 0; i < 4; i++) {
				double x1, x2, y1, y2;
				if (i == 0) {
					x1 = pos[6] - pos[i];
					y1 = pos[7] - pos[i+1];
					x2 = pos[(i + 1) * 2] - pos[i];
					y2 = pos[(i + 1) * 2 + 1] - pos[i+1];
				}else if (i == 3) {
					x1 = pos[4] - pos[6];
					y1 = pos[5] - pos[7];
					x2 = pos[0] - pos[6];
					y2 = pos[1] - pos[7];
				}else {
					x1 = pos[(i - 1) * 2] - pos[i * 2];
					y1 = pos[(i - 1) * 2 + 1] - pos[i * 2 + 1];
					x2 = pos[(i + 1) * 2] - pos[i * 2];
					y2 = pos[(i + 1) * 2 + 1] - pos[i * 2 + 1];
				}
				
				sum += calsi(x1, y1, x2, y2);
			}
			System.out.println((int)sum == 360? "YES" : "NO");
		}
	}
	
	private double calsi(double x1, double y1, double x2, double y2) {
		double a = x1 * x2 + y1 * y2;
		double b = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));
		double cos = a / b;
		double acos = Math.acos(cos);
		double si = Math.toDegrees(acos);
		//System.out.println(si);
		return si;
	}
	
	private void debug() {
		System.out.println();
	}

}