■1226 Fishnet
全通り試す.面積はヘロンの公式を使えば簡単.import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class Main{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
int n;
P[] a, b, c, d;
void run(){
for(;;){
n=sc.nextInt();
if(n==0){
break;
}
n+=2;
a=new P[n];
b=new P[n];
c=new P[n];
d=new P[n];
a[0]=new P(0, 0);
b[0]=new P(0, 1);
c[0]=new P(0, 0);
d[0]=new P(1, 0);
for(int i=1; i<n-1; i++)
a[i]=new P(sc.nextDouble(), 0);
for(int i=1; i<n-1; i++)
b[i]=new P(sc.nextDouble(), 1);
for(int i=1; i<n-1; i++)
c[i]=new P(0, sc.nextDouble());
for(int i=1; i<n-1; i++)
d[i]=new P(1, sc.nextDouble());
a[n-1]=new P(1, 0);
b[n-1]=new P(1, 1);
c[n-1]=new P(0, 1);
d[n-1]=new P(1, 1);
solve();
}
}
void solve(){
double ans=0;
for(int j=0; j<n-1; j++){
for(int i=0; i<n-1; i++){
P p1=isLL(a[i], b[i], c[j], d[j]);
P p2=isLL(a[i+1], b[i+1], c[j], d[j]);
P p3=isLL(a[i+1], b[i+1], c[j+1], d[j+1]);
P p4=isLL(a[i], b[i], c[j+1], d[j+1]);
ans=max(ans, area(p1, p2, p3)+area(p3, p4, p1));
}
}
println(String.format("%.6f", ans+EPS));
}
double area(P p1, P p2, P p3){
double a=p1.sub(p2).abs();
double b=p2.sub(p3).abs();
double c=p3.sub(p1).abs();
double s=(a+b+c)/2;
return Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
// 直線と直線の交点
P isLL(P p1, P p2, P q1, P q2){
double d=q2.sub(q1).det(p2.sub(p1));
if(abs(d)<EPS)
return null;
return p1.add(p2.sub(p1).mul(q2.sub(q1).det(q1.sub(p1))/d));
}
class P{
double x, y;
P(){
this(0, 0);
}
P(double x, double y){
this.x=x;
this.y=y;
}
P add(P p){
return new P(x+p.x, y+p.y);
}
P sub(P p){
return new P(x-p.x, y-p.y);
}
P mul(double m){
return new P(x*m, y*m);
}
P div(double d){
return new P(x/d, y/d);
}
double abs(){
return Math.sqrt(abs2());
}
double abs2(){
return x*x+y*y;
}
double arg(){
return Math.atan2(y, x);
}
// inner product
double dot(P p){
return x*p.x+y*p.y;
}
// outer product
double det(P p){
return x*p.y-y*p.x;
}
P rot90(){
return new P(-y, x);
}
// conjugation
P conj(){
return new P(x, -y);
}
@Override
public String toString(){
return "("+x+", "+y+")";
}
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
void print(String s){
System.out.print(s);
}
void println(String s){
System.out.println(s);
}
public static void main(String[] args){
// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
new Main().run();
}
}
0 件のコメント:
コメントを投稿