| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么总编译错误呢?求指教、。。。#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI acos(-1)
using namespace std;
struct point
{
int x;
int y;
} point;
struct point f[1002];
struct point tmp;
int multiply(struct point p1,struct point p2,struct point p0)//坐标排序
{
return((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
}
int left(int i,int j,int k)
{
int x1=f[j].x-f[i].x;
int x2=f[k].x-f[i].x;
int y1=f[j].y-f[i].y;
int y2=f[k].y-f[i].y;
if((x1*y2-x2*y1)>0)
return 1;
else return 0;
}
double dis(int i,int j)//求两点间的距离
{
return sqrt((f[j].x-f[i].x)*(f[j].x-f[i].x)+((f[j].y-f[i].y)*(f[j].y-f[i].y)));
}
int main()
{
int i,j,k,n,l;
int temp,top;
int st[1002];
double sum;
while(scanf("%d%d",&n,&l)!=EOF)
{
k=0;
for(i=0; i<n; i++)
{
scanf("%d%d",&f[i].x,&f[i].y);
if(f[i].y<f[k].y||(f[i].y==f[k].y&&f[i].x<f[k].x))
k=i;
}
temp=f[k].x;
f[k].x=f[0].x;
f[0].x=temp;
temp=f[k].y;
f[k].y=f[0].y;
f[0].y=temp;
for (i=1; i<n-1; i++)
{
k=i;
for (j=i+1; j<n; j++)
if( (multiply(f[j],f[k],f[0])>0)||
((multiply(f[j],f[k],f[0])==0)&&(dis(0,j)<dis(0,k))) )
k=j;//k保存极角最小的那个点,或者相同距离原点最近
tmp=f[i];
f[i]=f[k];
f[k]=tmp;
}
//printf("\n");
//for(i=0; i<n; i++)
// printf("%d %d\n",f[i].x,f[i].y);
top=0;
st[top++]=0;
st[top++]=1;
st[top++]=2;
for(i=3; i<n;)
{
if(top<2) st[top++]=i++;
else if(left(st[top-2],st[top-1],i))
st[top++]=i++;
else
top--;
}
//for(i=0;i<top;i++)
// printf("%d ",st[i]);
sum=2*PI*l;
for(i=0; i<top; i++)
{
if(i+1<top)
sum+=dis(st[i],st[i+1]);
else
sum+=dis(0,st[top-1]);
}
printf("%d\n",(int)(sum+0.5));
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator