AOJ 0058 - Orthogonal

直線なので内積つかえばよい.
線分ならば交点があるか調べないといけないはず.
汚いコード

#include<iostream>
#include<cstdio>

struct P{
	double x, y;
};

P pointToVector(P p1, P p2){
	P p = {p2.x-p1.x, p2.y-p1.y};
	return p;
}

double dotProduct(P p1, P p2){
	return p1.x*p2.x+p1.y*p2.y;
}

int main(){
	P ps[4];
	while(std::cin >> ps[0].x >> ps[0].y, !std::cin.eof()){
		for(int i=1;i<4;i++){
			std::cin >> ps[i].x >> ps[i].y;
		}
		P p1 = pointToVector(ps[0], ps[1]), 
			p2 = pointToVector(ps[2], ps[3]);
		if(dotProduct(p1, p2) == 0){
			puts("YES");
		}else{
			puts("NO");
		}
	}
}