平分凸多边形面积的线段有无数条,求其中最长的线段长度,我的答案有点问题,哪位帮我看一下


#include<stdio.h>
#include<math.h>
struct point
{
    double x,y;
}a[5003],O;
double squre(point i,point j,point k)
{
    double s;
    s=i.x*j.y-i.x*k.y+j.x*k.y-j.x*i.y+k.x*i.y-k.x*j.y;
    return fabs(s/2);
}
double dist(point i,point j)
{    
    double l;
    l=sqrt((i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y));
    return l;
}
int main()
{
    int n,i,i1,i2,i3;
    double s,t,k,len=0,max;
    scanf("%d",&n);
    for(i=0;i<n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
    a[n]=a[0];
    s=0; 
    for(i=0;i<n;i++) s+=fabs(a[i].x*a[i+1].y-a[i+1].x*a[i].y);
    s=s/4; //接下来的s为面积的一半 _finished_
    max=0;
    for(i=0;i<n;i++)
    {
        t=0;
        i1=i;
        while(1)
        {
            i2=(i1+1)%n;
            i3=(i2+1)%n;
            t+=squre(a[i1],a[i2],a[i3]);
            if(t>=s) break;
        }
        //printf("%lf",t);
        k=1-(t-s)/squre(a[i1],a[i2],a[i3]);//printf("%lf\n",k);
        O.x=a[i3].x+(a[i2].x-a[i3].x)*k;
        O.y=a[i3].y+(a[i2].y-a[i3].y)*k; //printf("%lf %lf",O.x,O.y);
        len=dist(O,a[i1]);//printf("%lf\n",len);
        if(len>max) {
        max=len;
        }
    }
    printf("%lf",max);
    return 0;
}

输入
5
0 0
99999 20000
100000 70000
33344 63344
1 50000
输出
120182.575925
输入
4
0 0
10 0
10 10
0 10
输出
14.142136
输入
3
0 0
6 0
3 10
输出
10.000000