题目链接:http://codeforces.com/problemset/problem/459/A
题目意思:给出两个点的坐标你,问能否判断是一个正方形,能则输出剩下两点的坐标,不能就输出 -1。
这题更傻了,在考虑对角线的两点时,少考虑了一种情况:两个点分属不同象限:这时需要用到绝对值函数 abs !
最近集训不知道是不是搞傻左,反正CF的题目打了几场,结果都很惨,有一点点恐惧感,怕跌回以前不堪的rating。唉~~~继续努力吧!!!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 using namespace std; 7 8 int main() 9 { 10 int x1, y1, x2, y2; 11 while (scanf("%d%d%d%d", &x1, &y1, &x2, &y2) != EOF) 12 { 13 // 两点平行,绝对有解 14 if (x1 == x2 && y1 != y2) // x 坐标相同 15 { 16 if (x1 + (y1-y2) >= -1000 && x1 + (y1-y2) <= 1000) // 这是为了严谨起见,可能会超出给定范围 17 printf("%d %d %d %d\n", x1 + (y1-y2), y1, x2 + (y1-y2), y2); 18 else 19 printf("%d %d %d %d\n", x1 + (y2-y1), y1, x2 + (y2-y1), y2); 20 } 21 else if (y1 == y2 && x1 != x2) // y 坐标相同 22 { 23 if ((x1-x2) + y1 >= -1000 && (x1-x2) + y1 <= 1000) 24 printf("%d %d %d %d\n", x1, (x1-x2) + y1, x2, (x1-x2) + y2); 25 else 26 printf("%d %d %d %d\n", x1, (x2-x1) + y1, x2, (x2-x1) + y2); 27 } 28 // 对角线情况不一定有解 29 else if (abs(x1 - x2) == abs(y1 - y2)) // 对角线 30 { 31 printf("%d %d %d %d\n", x1, y2, x2, y1); 32 } 33 else 34 { 35 printf("-1\n"); 36 } 37 } 38 return 0; 39 } 40