夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

Trialやって0012

ちょっとTrialみてみて・・・

ほとんど入力とか数値とか出力とか気をつけるだけの問題ばっかだったけど何故かDが通らなかったorz


一応Trial中なので念のためにコードも解説もしなけど(ってか内容ないよ。うん。)

0012

というわけで結構放ったらかしにしていた”幾何”の問題。

Vector知ってる人にはある程度簡単に解法が思いつくんだろうけど、僕はそんなもの身につけていないので「三角形 内部」でぐぐって…

中心点と点の線分と三辺の交差関係を調べればいいとかあったんで、そっからは領域を応用してときますた。

#include <iostream>
#include <cmath>

using namespace std;

bool cross(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) {
	double ab=(y1-y2)/(x1-x2)*(x3-x1)+y1, cd=(y1-y2)/(x1-x2)*(x4-x1)+y1;
	if ((ab>y3&&cd>y4)||(ab<y3&&cd<y4)) return false;
	return true;
}

int main() {
	double x1, x2, x3, y1, y2, y3, xp ,yp;
	while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> xp >> yp) {
		double xm = (x1+x2+x3)/3, ym = (y1+y2+y3)/3;
		if (cross(x1,y1,x2,y2,xm,ym,xp,yp)||cross(x2,y2,x3,y3,xm,ym,xp,yp)||cross(x3,y3,x1,y1,xm,ym,xp,yp)) {
			cout << "NO" << endl;
		} else {
			cout << "YES" << endl;
		}
	}
	return 0;
}

こういうのJOIとかでいきなり出されても俺解けない気がする(^_^;)
ってかAOJみてるとJOI予選も突破できないんじゃないかという不安が…夏休み頑張る。