Lilliput Steps

小さな一歩から着実に. 数学やプログラミングのことを書きます.

AOJ 0187 - Stoning Fortune

問題文 : Stoning Fortune

解法 :
線分の交差判定・交点判定がきちんとできていれば, 面積を求めて条件に合わせて出力を行う問題.
ライブラリを頼りました.


コード :

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    Point p[3], q[3], x[3];
    double S;
	
    while (1){
        for (int i = 0; i < 3; i++){
			int x1, y1, x2, y2;
            scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
			
            if (i == 0 && x1 == 0 && x2 == 0 && y1 == 0 && y2 == 0) return (0);
			
			p[i] = Point(x1, y1); q[i] = Point(x2, y2);
        }
		
		int k = 0;
		for (int i = 0; i < 3; i++){
			for (int j = i + 1; j < 3; j++){
				if (!isIntersect(p[i], q[i], p[j], q[j])){
					printf("kyo\n");
					goto next;
				}
				x[k++] = interPointS(p[i], q[i], p[j], q[j]);
			}
		}
		
		if (x[0] == x[1] || x[1] == x[2] || x[0] == x[2]){
			printf("kyo\n");
			goto next;
		}
		
		S = area(x[0], x[1], x[2]);
		
		if (S >= 1900000) printf("dai-kichi\n");
		else if (S >= 1000000) printf("chu-kichi\n");
		else if (S >= 100000) printf("kichi\n");
		else printf("syo-kichi\n");
		
		next:;
	}	
	
	return (0);
}