将折射的光线以水面为对称 反转上去 刚好z的位置应该射到2*h-z
用int后面几个例子过不去 需要改成long
#include <iostream>
#include <vector>
using namespace std;
//欧几里得算法求最大公约数
long gcd(long a, long b) {
if(b == 0) return a;
else return gcd(b, a % b);
}
int main() {
int n, h;
cin >> n >> h;
while(n--) {
long x, y, z;
cin >> x >> y >> z;
//将折射的光线以水面为对称 反转上去 刚好z的位置应该射到2*h-z
long max_divisor = gcd(gcd(x, y), 2*h - z);
cout << x / max_divisor << " " << y / max_divisor << " " << (2*h - z) / max_divisor << endl;
}
return 0;
}



京公网安备 11010502036488号