
#include<stdio.h>
#include<math.h>
struct point
{ int x,y;
}a[10004];
double dist2(point a, point b)
{ int dx,dy;
dx=a.x-b.x; dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int area(point p1, point p2, point p3)
{ int s;
s=p1.x*p2.y-p1.y*p2.x+p2.x*p3.y-p2.y*p3.x+p3.x*p1.y-p3.y*p1.x;
return s;
}
int main()
{
int i,n,j,k,sum,l,sum2;
int b[10000]={0};
int c[10000];
int d[10000];
int e[10000];
int f[10000];
double Lmax,temp;
Lmax=0;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
temp=dist2(a[i],a[j]);
if (Lmax<temp) Lmax=temp;
}
printf("%.4lf\n",Lmax);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
sum=0;sum2=0;
for(l=0;l<n;l++)
{
k=area(a[i],a[j],a[l]);
if(k>0)
sum++;
else if(k<0)
sum2++;
}
if(sum==n-2||sum2==n-2)
{
b[i]=1;
b[j]=1;
}
}
}
j=0;
for(i=0;i<n;i++)
{
if(b[i]!=0)
{
c[j]=i;
j++;
}
}
int m=j;
for(i=0;i<j-1;i++)
{
for(k=0;k<j-i-1;k++)
{
if((a[c[k]].y>a[c[k+1]].y)||((a[c[k]].y==a[c[k+1]].y)&&(a[c[k]].x>a[c[k+1]].x)))
{
temp=c[k];
c[k]=c[k+1];
c[k+1]=temp;
}
}
}
int a1,b1,c1;
a1=0;b1=0;c1=0;
for(i=1;i<m;i++)
{
if(a[c[i]].x==a[c[0]].x)
{
e[a1]=c[i];
a1++;
}
else if(a[c[i]].x>a[c[0]].x)
{
d[b1]=c[i];
b1++;
}
else
{
f[c1]=c[i];
c1++;
}
}
for(i=0;i<b1-1;i++)
{
for(k=0;k<b1-i-1;k++)
{
if(a[d[k]].y>a[d[k+1]].y)
{
temp=d[k];
d[k]=d[k+1];
d[k+1]=temp;
}
if(a[d[k]].y==a[d[k+1]].y&&a[d[k]].x>a[d[k+1]].x)
{
temp=d[k];
d[k]=d[k+1];
d[k+1]=temp;
}
}
}
for(i=0;i<c1-1;i++)
{
for(k=0;k<c1-i-1;k++)
{
if(a[f[k]].y<a[f[k+1]].y)
{
temp=f[k];
f[k]=f[k+1];
f[k+1]=temp;
}
if(a[f[k]].y==a[f[k+1]].y&&a[f[k]].x<a[f[k+1]].x)
{
temp=f[k];
f[k]=f[k+1];
f[k+1]=temp;
}
}
}
printf("%d ",c[0]);
for(i=0;i<b1;i++)
printf("%d ",d[i]);
printf("%d ",e[0]);
for(i=0;i<c1;i++)
printf("%d ",f[i]);
return 0;
}
这样写哪里错了