「オイラープロジェクト101~110」の編集履歴(バックアップ)一覧に戻る

オイラープロジェクト101~110 - (2012/08/27 (月) 15:41:55) の編集履歴(バックアップ)


問い102

http://projecteuler.net/problem=102
1000個の三角形のデータが与えられるので、原点を含むものが何個あるか。
計算誤差を考えなくてすむ整数値でデータが与えられているのでとても楽な問題。
外積の概念を使って楽々アセプト。
三角形ABCを考えた時、外積OA*OB、OB*OC、OC*OAの符号がそろえば原点が三角形の内部にあると判断。


#include <stdio.h>
#include<iostream>
int main(){
FILE *fp;
if((fp=fopen("triangles.txt","r"))==NULL){
	printf("fileOpenError");
	exit(EXIT_FAILURE);
}
int xs[3],ys[3],ans=0;
while(fscanf(fp,"%d,%d,%d,%d,%d,%d",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2])>0){
	int a=xs[0]*ys[1]-xs[1]*ys[0];
	int b=xs[1]*ys[2]-xs[2]*ys[1];
	int c=xs[2]*ys[0]-xs[0]*ys[2];
	ans+=((a<0&&b<0&&c<0)||(a>0&&b>0&&c>0));
}
fclose(fp);
std::cout<<ans;
}