寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #CGL_1_C : Counter-Clockwise

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Counter-Clockwise"
https://onlinejudge.u-aizu.ac.jp/problems/CGL_1_C
・反時計回り

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #CGL_1_C : Counter-Clockwise
/*
Aizu Online Judge in C++ #CGL_1_C : Counter-Clockwise
https://onlinejudge.u-aizu.ac.jp/problems/CGL_1_C
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using C=complex<double>;
string f(C a,C b,C c){
    C ab=b-a,ac=c-a;
    C k=ac*conj(ab);
    if(k.imag()>0){
        return "COUNTER_CLOCKWISE";
    }
    if(k.imag()<0){
        return "CLOCKWISE";
    }
    if(k.real()<0){
        return "ONLINE_BACK";
    }
    if(abs(ab)<abs(ac)){
        return "ONLINE_FRONT";
    }
    return "ON_SEGMENT";
}
int main(void){
    double x0,y0,x1,y1,x2,y2;
    int n;
    cin>>x0>>y0>>x1>>y1>>n;
    C a(x0,y0);
    C b(x1,y1);
    while(n--){
        cin>>x2>>y2;
        C c(x2,y2);
        cout<<f(a,b,c)<<endl;
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/