| ||||||||||
| 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 | |||||||||
so easy a problem... but take me much time morose!!!It is my programme:
#include<stdio.h>
#include<math.h>
#define maxlong 101
double fsx,fsy,D;
int total,start;
typedef struct sit
{
double x;
double y;
};
sit sits[maxlong];
sit fs;
sit zero;
sit tempvet;
int use[maxlong];
sit vert(sit m,sit n)
{
sit temp;
temp.x=m.x-n.x;
temp.y=m.y-n.y;
return temp;
}
double angle(sit a,sit b)
{
return a.x*b.x+a.y*b.y;
}
double dis(sit a,sit b)
{ return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}
int main()
{
int i,tempstart;
double distance,maxdis;
sit temp;
zero.x=0;zero.y=0;
while(1)
{
scanf("%lf%lf%d%d%lf",&fs.x,&fs.y,&total,&start,&D);
if(total==0&&start==0&&D==0&&fs.x==0&&fs.y==0) return 0;
tempvet.x=0;tempvet.y=0;
for(i=1;i<=total;++i)
{scanf("%lf%lf",&sits[i].x,&sits[i].y);use[i]=0;}
tempstart=start;
printf("%d",start);
l1:
use[start]=1;
maxdis=0;
for(i=1;i<=total;++i)
{ distance=dis(sits[i],sits[start]);
temp=vert(sits[i],sits[start]);
if(distance<=D&&angle(fs,temp)>=0&&use[i]==0&&angle(temp,tempvet)>=0)
{
if(angle(fs,temp)/dis(temp,zero)>maxdis)
{ maxdis=angle(fs,temp)/dis(temp,zero);tempstart=i;tempvet=vert(sits[i],sits[start]);}
}
}
if(start!=tempstart)
{ start=tempstart; printf(" %d",tempstart);goto l1;}
else printf("\n");
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator