| ||||||||||
| 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 | |||||||||
算出的距离要四舍五入(+0.005)再和0.0001比较如果小于为0,不然WA到死~/*
题意:给出地球上两个点,求出两点之间的距离,如果小于100输出DANGER否则输出距离
关于东西经和南北纬,要注意:东经的点的y值都是正值,西经的点的y值都是负值,北纬的点的z值都是正值,南纬的点的z值都是负值
*/
#include<iostream>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<map>
#include<cstdlib>
#include<cmath>
#include<vector>
#define LL long long
#define IT __int64
#define zero(x) fabs(x)<eps
#define mm(a,b) memset(a,b,sizeof(a))
const int INF=0x7fffffff;
const double inf=1e8;
const double eps=1e-8;
const double PI=acos(-1.0);
const int Max=20001;
const double R=3437.5;
using namespace std;
int sign(double x)
{
return (x>eps)-(x<-eps);
}
typedef struct Node
{
double x;
double y;
Node(const double &_x=0, const double &_y=0) : x(_x), y(_y) {}
void input()
{
cin>>x>>y;
}
void output()
{
cout<<x<<" "<<y<<endl;
}
}point;
double xmult(point p0,point p1,point p2)
{
return(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double dmult(point p0,point p1,point p2)
{
return(p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);
}
double Distance(point p1,point p2)// 返回两点之间欧氏距离
{
return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) );
}
double Distance_Angle(double Angle_1,double Angle_2,double Angle_3,double Angle_4)
{
double theta,dis;
Angle_1=Angle_1*PI/180;
Angle_2=Angle_2*PI/180;
Angle_3=Angle_3*PI/180;
Angle_4=Angle_4*PI/180;
theta=acos(cos(Angle_1)*cos(Angle_3)*cos(Angle_2-Angle_4)+sin(Angle_1)*sin(Angle_3));
dis=theta*R;
return dis;
}
int main()
{
int n,m,i,j;
int HH,MM,SS;
double dis;
double x1,x2,x3;
double y1,y2,y3;
double a1,a2,a3;
double b1,b2,b3;
double Angle_1,Angle_2,Angle_3,Angle_4;
char str1[100],str2[100],str3[100],str4[100],str5[100];
char c1,c2,c3;
while(scanf("%s",&str1)!=EOF)
{
getchar();
scanf("%c%d%c",&c1,&n,&c2);
//cout<<"1: "<<n<<endl;
scanf("%s%s",&str1,&str2);
scanf("%d:%d:%d.",&HH,&MM,&SS);
//cout<<"2: "<<HH<<" "<<MM<<" "<<SS<<endl;
scanf("%s%s%s%s",&str1,&str2,&str3,&str4);
scanf("%lf%c%lf%c%lf%c",&x1,&c1,&x2,&c2,&x3,&c3);
Angle_1=x1+x2/60+x3/3600;
scanf("%s",&str1);
if(str1[0]=='S')//南经的点值是负值
Angle_1=-Angle_1;
//cout<<"3: "<<x1<<" "<<x2<<" "<<x3<<endl;
//puts(str1);
scanf("%s",&str1);
//puts(str1);
scanf("%lf%c%lf%c%lf%c",&y1,&c1,&y2,&c2,&y3,&c3);
//cout<<"4: "<<y1<<" "<<y2<<" "<<y3<<endl;
Angle_2=y1+y2/60+y3/3600;
scanf("%s",&str1);
if(str1[0]=='W')
Angle_2=-Angle_2;
//puts(str1);
scanf("%s%s%s%s%s",&str1,&str2,&str3,&str4,&str5);
scanf("%lf%c%lf%c%lf%c",&a1,&c1,&a2,&c2,&a3,&c3);
Angle_3=a1+a2/60+a3/3600;
scanf("%s",&str1);
if(str1[0]=='S')
Angle_3=-Angle_3;
//puts(str1);
//cout<<"5: "<<a1<<" "<<a2<<" "<<a3<<endl;
scanf("%s",&str1);
scanf("%lf%c%lf%c%lf%c",&b1,&c1,&b2,&c2,&b3,&c3);
Angle_4=b1+b2/60+b3/3600;
scanf("%s",&str1);
if(str1[0]=='W')
Angle_4=-Angle_4;
//cout<<"6: "<<b1<<" "<<b2<<" "<<b3<<endl;
scanf("%s",&str1);
//puts(str1);
//cout<<Angle_1<<" "<<Angle_2<<" "<<Angle_3<<" "<<Angle_4<<endl;
dis=Distance_Angle(Angle_1,Angle_2,Angle_3,Angle_4);
cout<<"The distance to the iceberg: "<<setprecision(2)<<setiosflags(ios::fixed)<<dis<<" miles."<<endl;
if(sign(dis-100+0.005)<eps)
cout<<"DANGER!"<<endl;
}
return 0;
}
/*
Message #513.
Received at 22:30:11.
Current ship's coordinates are
41^46'00" NL
and 50^14'00" WL.
An iceberg was noticed at
41^14'11" NL
and 51^09'00" WL.
===
*/
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator