得密切注意题目的规模, 不承诺放弃一切暴力手段! #include <cstdio> #include <cmath> struct bulb { int x, y, z, I; }; bulb bb[101]; double dist(int x, int y, bulb& b) { return sqrt((double)(b.x-x)*(b.x-x)+(double)(b.y-y)*(b.y-y)+(double)b.z*b.z); } int main(int argc, char* argv[]) { int T, n, i, j, k; double e, r, max; scanf("%d", &T); while(T--) { max = 0.0; scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d%d%d%d", &bb[i].x, &bb[i].y, &bb[i].z, &bb[i].I); } for(i = -100; i <= 100; i++) { for(j = -100; j <= 100; j++) { e = 0.0; for(k = 0; k < n; k++) { r = dist(i, j, bb[k]); e += bb[k].I/r/r*bb[k].z/r; } if(e > max) { max = e; } } } printf("%.2lf/n", max); } return 0; }