Arpa and an exam about geometry(codeforces 851B)
Arpa and an exam about geometry
Arpa is taking a geometry exam. Here is the last problem of the exam.
You are given three points a, b, c.
Find a point and an angle such that if we rotate the page around the point by the angle, the new position of a is the same as the old position of b, and the new position of b is the same as the old position of c.
Arpa is doubting if the problem has a solution or not (i.e. if there exists a point and an angle satisfying the condition). Help Arpa determine if the question has a solution or not.
The only line contains six integers ax, ay, bx, by, cx, cy (|ax|, |ay|, |bx|, |by|, |cx|, |cy| ≤ 109). It's guaranteed that the points are distinct.
Print "Yes" if the problem has a solution, "No" otherwise.
You can print each letter in any case (upper or lower).
0 1 1 1 1 0
Yes
1 1 0 0 1000 1000
No
In the first sample test, rotate the page around (0.5, 0.5) by .
In the second sample test, you can't find any solution.
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> using namespace std; struct Point{ int x,y; Point(){} Point(int a,int b):x(a),y(b){} inline void input(){ scanf("%d%d", &x, &y); } Point operator-(const Point &a)const{ return Point(x - a.x, y - a.y); } bool operator==(const Point &a)const{ if((x - a.x)==0 && (y - a.y)==0) return 1; else return 0; } Point operator/(const double &a){ return Point(x/a, y/a); } bool pdk(const Point &a){ return (1ll*x * a.y - 1ll*y * a.x)==0; } void output(){ printf("x = %d y = %d\n", x, y); } long long dis(){ return 1ll*x*x + 1ll*y*y; } }; struct Line{ Point s,e; Line(){} Line(const Point &a, const Point &b):s(a),e(b){} Line(const Line &a){ s = a.s, e = a.e; } }; int main(){ Point a,b,c; a.input(); b.input(); c.input(); if( (b-a).pdk(c-b) || (b-a).dis()!= (c-b).dis()) puts("No"); else puts("Yes"); return 0; }