Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

有谁来帮帮本菜?WA十几次了-_-|||,都照着别人的代码打了,怎么还WA呢...

Posted by chyx at 2009-09-09 10:31:19 on Problem 3407
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define sq(a) ((a)*(a))

typedef double T;
double R = 6370;
struct Pt3D
{
	T th1, th2;
	T x,y,z;
	void convert()
	{
		z = R * cos(th2);
		x = R * cos(th1) * sin(th2);
		y = R * sin(th1) * sin(th2);
	};
};
T dot(Pt3D& a, Pt3D& b){ return a.x*b.x + a.y*b.y + a.z*b.z;}
T norm(Pt3D a){ return sq(a.x)+sq(a.y)+sq(a.z);}

double pi = 3.14159265358979323846264;

Pt3D src, dst;

char input()
{
	char s1[10];
	T a, b, alpha;

	if(scanf("%lf%lf%s", &a, &b, s1) != 3) return 0;
	alpha = a+b/60;
	if(*s1 == 'N')
		alpha =90 - alpha;
	else
		alpha = 90+ alpha;
	src.th2 = pi*alpha/180;

	scanf("%lf%lf%s", &a, &b, s1);
	alpha = a+b/60;
	if(*s1 == 'W')alpha = 360 - alpha;
	src.th1 = pi*alpha/180;
	
	scanf("%lf%lf%s", &a, &b, s1);
	alpha = a+b/60;
	if(*s1 == 'N')
		alpha =90 - alpha;
	else 
		alpha =90+ alpha;
	dst.th2 = pi*alpha/180;
	
	scanf("%lf%lf%s", &a, &b, s1);
	alpha = a+b/60;
	if(*s1 == 'W')alpha = 360 -alpha;
	dst.th1 = pi*alpha/180;
	
	src.convert();
	dst.convert();
	return 1;
}

int main()
{
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
#endif
	int i, k, lv;

	while(input())
	{
		double th = dot(src,dst)/sqrt(norm(src))/sqrt(norm(dst));
		th = acos(th);
		printf("%.10lf\n", th*R);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator