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 C (judge verdict: Time Limit Exceeded)

#include<stdio.h>
void swap(double *a,double *b){
    int hoge;
    hoge=*a;
    *a=*b;
    *b=hoge;
}
int main(void){
    int i;
    double x[4],y[4],a,b,c,d,ansx,ansy,_x[4],_y[4],hoge;
    while(1){
        if(scanf("%lf",&x[0])!=EOF){
            scanf(",%lf,%lf,%lf,%lf,%lf,%lf,%lf",&y[0],&x[1],&y[1],&x[2],&y[2],&x[3],&y[3]);
        }
        /*for(i=0;i<4;i++){
            printf("  %d  %f %f\n",i,x[i],y[i]);
        }*/
        a=(y[0]-y[2])/(x[0]-x[2]);
        b=y[0]-a*x[0];
        c=(y[1]-y[3])/(x[1]-x[3]);
        d=y[1]-c*x[1];
        //printf("y = %fx + %f\ny = %fx + %f\n",a,b,c,d);
        if(0.0000001>(c-a) && (c-a)>-0.0000001){
            printf("YES\n");
            continue;
        }
        ansx=(b-d)/(c-a);
        //printf("\n%f,%f\n",ansx,ansy);
        if(x[0]>x[2])swap(&x[0],&x[2]);
        if(x[1]>x[3])swap(&x[1],&x[3]);
        if(x[0]<=ansx && ansx<=x[2] && x[1]<=ansy && ansy<=x[3]){
            printf("YES\n");
        }
        else{
            printf("NO\n");
        }
    }
    return 0;
}