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 }
题目: