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 |
Re:发现超级大水题In Reply To:发现超级大水题 Posted by:yygy at 2023-05-15 15:24:01 // MyFirstApp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <vector> #include <math.h> #include <stdio.h> #include <algorithm> using namespace std; typedef __int64 lld; const int MAXN = 512; //经度角a, 纬度角b double GeodesicDistance(double r, double a1, double b1, double a2, double b2) { return r * acos(cos(b1) * cos(b2) * cos(a1 - a2) + sin(b1) * sin(b2)); } int GetNum(char *s, int& iter, int len) { //找到第一个数字位 while (iter < len && !isdigit(s[iter])) { iter++; } if (iter < len) { int d = 0; //是数字位一直前进 while (iter < len && isdigit(s[iter])) { d = d * 10 + s[iter] - '0'; iter++; } return d; } else { return -1; } } void GetLatitude(char* s, double& lat1) { lat1 = 0; //41^46'00" NL int len = strlen(s); int iter = 0; int down = 1; int d = -1; while ((d = GetNum(s, iter, len))>=0) { printf("d=%d\n", d); lat1 += d * 1.0 / down; down *= 60; } const double pi = acos(-1.0); lat1 = lat1 / 180 * pi; int id = 0; for (id = len - 1; id >= 0; id--) { if (s[id] == 'L') { break; } } if (s[id-1] == 'S') { lat1 = -lat1; } } void GetLongitude(char* s, double& lon1) { lon1 = 0; //50^14'00" WL. int len = strlen(s); int iter = 0; int down = 1; int d = -1; while ((d = GetNum(s, iter, len)) >= 0) { printf("d=%d\n", d); lon1 += d * 1.0 / down; down *= 60; } const double pi = acos(-1.0); lon1 = lon1 / 180 * pi; int id = 0; for (id = len - 1; id >= 0; id--) { if (s[id] == 'L') { break; } } if (s[id - 1] == 'W') { lon1 = -lon1; } } bool ReadData(double& lat1, double& lon1, double& lat2, double& lon2) { char s[10][100]; for (int i = 0; i < 9; i++) { if (!cin.getline(s[i], 1024)) { return false; } } //3 GetLatitude(s[3], lat1); //4 GetLongitude(s[4], lon1); //6 GetLatitude(s[6], lat2); //7 GetLongitude(s[7], lon2); return true; } int main() { double a1, b1, a2, b2; while (ReadData(b1, a1, b2, a2)) { double ans = GeodesicDistance(6875.0, a1, b1, a2, b2); printf("The distance to the iceberg : %.2f miles.\n", ans); double diff = ans * 100 - 10000; if (fabs(diff) > 1e-6 && diff < 0) { puts("DANGER!"); } } return 0; } /* Sample Input 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. === Sample Output The distance to the iceberg: 52.04 miles. DANGER! 6875 */ Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator