Untitled
unknown
plain_text
a month ago
1.7 kB
1
Indexable
Never
import java.util.Scanner; public class MagneticBalance { static final double EPSILON = 1e-10; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); for (int test_case = 1; test_case <= T; test_case++) { int N = scanner.nextInt(); double[] x = new double[N]; double[] mass = new double[N]; double totalMass = 0; for (int i = 0; i < N; i++) { x[i] = scanner.nextDouble(); mass[i] = scanner.nextDouble(); totalMass += mass[i]; } double left = 0.0; double right = x[N - 1]; double result = 0.0; while (right - left > EPSILON) { double mid = (left + right) / 2; double leftForce = calculateForce(x, mass, totalMass, mid, true); double rightForce = calculateForce(x, mass, totalMass, mid, false); if (leftForce < rightForce) { left = mid; } else { right = mid; } result = mid; } System.out.printf("#%d %.10f%n", test_case, result); } } static double calculateForce(double[] x, double[] mass, double totalMass, double mid, boolean isLeft) { double force = 0; for (int i = 0; i < x.length; i++) { double dist = isLeft ? (mid - x[i]) : (x[i] - mid); if (dist < 0) { force += mass[i] * totalMass / (dist * dist); } } return force; } }