题解 | 仰望水面的歪
仰望水面的歪
https://www.nowcoder.com/practice/69f00fb8b2004e039097c57b43c33b90
#include <iostream> #include <vector> #include <string> #include <unordered_map> #include <algorithm> #include <cmath> #include <cstdint> #include <list> #include <map> #include <numeric> #include<queue> #include<set> #include <unordered_set> #include <sstream> #include<stack> using namespace std; int main() { int64_t n, h; cin >> n >> h; while (n--) { int64_t x, y, z; cin >> x >> y >> z; //x-i/i = -(z-h)/h,其他的同理 // 计算经过反射后到达目标的坐标 int64_t i = h * x; // x坐标的反射 int64_t j = h * y; // y坐标的反射 int64_t k = h * (2 * h - z); // z坐标的反射 // 计算最大公约数,用于化简坐标 int64_t gcd_val = gcd(i, gcd(j, k)); // 化简坐标 i /= gcd_val; j /= gcd_val; k /= gcd_val; // 输出反射后的坐标 cout << i << " " << j << " " << k << endl; } return 0; }