CF Round 432 B. Arpa and an exam about geometry

题目链接http://codeforces.com/contest/851/problem/B

题目大意:纸上有三个点a, b, c,问有没有可能找到另一个点,将纸张绕着这个点选择一定角度后a与原来的b点重复,b与原来的c点重复。

解题思路:由于旋转相当于在画弧,因此可以发现另外找的点到a, b, c的距离都相等。又由于旋转的角度一样,因此只要保证a, b, c不在同一条线上并且a,b距离等于b, c距离即可。

可能需要注意精度问题。

代码:

 1 const double eps = 1e-9;
 2 const double PI = acos(-1);
 3 ll powmod(ll a, ll b) { ll res = 1; a %= mod; assert(b >= 0); for (; b; b >>= 1) { if (b & 1)res = res*a%mod; a = a*a%mod; }return res; }
 4 const int iadd[] = {0, 1, 0, -1}, jadd[] = {1, 0, -1, 0};
 5 const int inf = 0x3f3f3f3f;
 6 const int maxn = 1e6 + 5;
 7 double ax, ay, bx, by, cx, cy;
 8 
 9 void solve(){
10     double tmp = (cx - bx) * (by - ay) - (bx - ax) * (cy - by);
11     if(fabs(tmp) < eps){
12         puts("No");
13         return;
14     }
15     double d1 = (ax - bx) * (ax - bx) + (ay - by) * (ay - by);
16     double d2 = (cx - bx) * (cx - bx) + (cy - by) * (cy - by);
17     if(fabs(d1 - d2) < eps){
18         puts("Yes");
19         return;
20     }
21     puts("No");
22 }
23 int main(){
24     scanf("%lf %lf %lf %lf %lf %lf", &ax, &ay, &bx, &by, &cx, &cy);
25     solve();
26 }

题目:

B. Arpa and an exam about geometry
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

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.

Input

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.

Output

Print "Yes" if the problem has a solution, "No" otherwise.

You can print each letter in any case (upper or lower).

Examples
input
0 1 1 1 1 0
output
Yes
input
1 1 0 0 1000 1000
output
No
Note

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.

 

 

posted @ 2017-09-05 09:02  EricJeffrey  阅读(306)  评论(0编辑  收藏  举报