如题= =自用模板

只要改f函数就好了 eps是要求的精度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.io.*;
import java.util.*;
public class Main {
static double a,b;
static double eps=1e-9;
public static void main(String[] args) {
FastScanner sc=new FastScanner();
PrintWriter pw=new PrintWriter(System.out);
int t=sc.nextInt();
while(sc.hasNext()){
a=sc.nextDouble();
b=sc.nextDouble();
double l=sc.nextDouble();
double r=sc.nextDouble();
pw.printf("%.3f",integral(l,r,1e-4)*2);
pw.println();
pw.flush();
}

}
static double f(double x){
return Math.sqrt(b*b-b*b/(a*a)*x*x);
}
static double simpson(double l,double r){
double mid=l+(r-l)/2;
double res=1.0/6*(r-l)*(f(l)+4*f(mid)+f(r));
return res;
}
static double integral(double l,double r,double eps){
double mid=l+(r-l)/2;
double res=simpson(l,r);
double a=simpson(l,mid);
double b=simpson(mid,r);
if(Math.abs(res-a-b)<=eps*15)return a+b+(a+b-res)/15.0;
else return integral(l,mid,eps/2)+integral(mid,r,eps/2);
}
}