#include #include #include const double delta = 1e-6; struct Point{ double x, y, z; Point(double x_, double y_, double z_): x(x_), y(y_), z(z_){} Point():x(0),y(0),z(0){} }; double dist(const Point & p, const Point & q){ double dx = p.x - q.x; double dy = p.y - q.y; double dz = p.z - q.z; return sqrt(dx * dx + dy * dy + dz * dz); } bool isSimilar(double qr, double rp, double pq, double QR, double RP, double PQ){ if(fabs(qr) < delta || fabs(rp) < delta || fabs(pq) < delta){ return false; } double rate = QR / qr; return fabs(rate - RP / rp) < delta && fabs(rate - PQ / pq) < delta; } int main(){ int n; std::cin >> n; for(int hoge = 0; hoge < n; hoge++){ double PQ, QR, RP; std::cin >> QR >> RP >> PQ; int m; std::cin >> m; int order[m]; Point points [m]; for(int i = 0; i < m; i++){ order[i] = i; double x, y, z; std::cin >> x >> y >> z; points[i] = Point(x, y, z); } //std::cout << "m = " << m << std::endl; for(int j = 0; j < m; j++){ for(int k = 0; k < m; k++){ if(j == k){continue;} for(int l = 0; l < m; l++){ if(k == l){continue;} if(j == l){continue;} Point p = points[j]; Point q = points[k]; Point r = points[l]; if(isSimilar(dist(q, r), dist(r, p), dist(p, q), QR, RP, PQ)){ std::cout << j + 1 << ' ' << k + 1 << ' ' << l + 1 << std::endl; goto OUT; } } } } //std::cout << "=========" << std::endl; OUT: ; } }