博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【2012 - 百度之星资格赛 - I:地图的省钱计划】
阅读量:5738 次
发布时间:2019-06-18

本文共 2815 字,大约阅读时间需要 9 分钟。

I:地图的省钱计划

时间限制: 
1000ms
内存限制: 
65536kB
描述

百度地图有自己的一套坐标系(你可以把它看作一个笛卡尔坐标系),在这套坐标系里,一个标准单位为1km。而在这坐标系上针对地理信息进行标注的数据,大多数时候是通过购买的方式完成的。为了节约数据更新的成本,数据组里的鑫哥想出了一个好主意——自己测数据。

鑫哥按照他的预想开始实验;在每组试验中,鑫哥选取了三个已经被准确标注在百度地图的坐标系里的移动运营商的基站作为信号接收点(这里可以准确的得到信号的接收时间信息)。当信号接收点附近的用户手机签到时,三个信号接收点就会先后接收到这个信号,并可以准确的知晓接收到信号的时间(将第一个信号点接收到信号的时间记为0秒时刻)。由此,我们就可以确定用户手机签到的位置的在地图的准确坐标了。
现在已知以下数据:
1.三个信号接收点在百度地图坐标系中的具体坐标(x1,y1), (x2,y2), (x3,y3);
2.三个信号点得到用户发出的信号的时间t1, t2, t3(t1, t2, t3 ≥ 0),单位s; t1, t2, t3至少有一个数为0;
3.信号的转播速度C,单位m/s;
请帮助鑫哥写个程序,计算下用户发出信号的位置在百度地图坐标系内的坐标(这个点是唯一的)。

输入
输入包含多组数据,每组数据格式如下:
C
x1 y1 x2 y2 x3 y3
t1 t2 t3
最后一组数据为0,表示输入结束。
输出
针对每组测试数据,请先输出这个组的编号(第n组就是输出“Case n:”);然后换行输出信号发出点的坐标(x,y) 。x,y应该由空格分隔,并被舍入到小数点后第六位。
样例输入
10000 1 1 1 2 10 0.6 1.610000 0 0 1 1 00.4142135 0 010000 0 1 0 2 10 0.414213562373 110000 0 0 -1 0 10 0 110000 0 0 1 0 -10 1 010000 0 1 0 -1 00 1 010000 0 -1 0 1 00 0 11000 0 0 1 1 00 10 100
样例输出
Case 1:0.200000 1.000000Case 2:1.000000 1.000000Case 3:0.000000 1.000000Case 4:0.000000 -0.500000Case 5:0.000000 -0.500000Case 6:-0.500000 0.000000Case 7:-0.500000 0.000000Case 8:0.000000 0.000000
1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 using namespace std;18 double x[10], y[10], t[10];19 bool solve(int i, int j, int k)20 {21 double x1, y1, x2, y2, t1, t2;22 x1 = x[j] -x[i];23 x2 = x[k] -x[i];24 y1 = y[j] -y[i];25 y2 = y[k] -y[i];26 t1 = t[j] -t[i];27 t2 = t[k] -t[i];28 29 double A1 = x1*x1 + y1*y1 - t1*t1;30 double A2 = x2*x2 + y2*y2 - t2*t2;31 double A = A1*y2-A2*y1, B = A1*x2-A2*x1, C = A1 * t2 - A2 * t1;32 double cita = atan2(B, A);33 double sum = asin(- C/sqrt(A*A+B*B+1e-15));34 35 double alpha = sum - cita;36 double r;37 if (abs(A1)>abs(A2))38 r = A1/(t1 + x1 *cos(alpha) + y1 * sin(alpha))/2;39 else40 r = A2/(t2 + x2 *cos(alpha) + y2 * sin(alpha))/2;41 42 if (r<0)43 {44 sum = - sum + 3.141592653579;45 alpha = sum - cita;46 if (abs(A1)>abs(A2))47 r = A1/(t1 + x1 *cos(alpha) + y1 * sin(alpha))/2;48 else49 r = A2/(t2 + x2 *cos(alpha) + y2 * sin(alpha))/2;50 }51 52 53 printf("%.6f %.6f\n", r * cos(alpha) + x[i], r * sin(alpha) + y[i]);54 }55 int main()56 {57 for (int dd = 1; ; ++ dd)58 {59 double c;60 scanf("%lf", & c);61 c/=1000;62 if (abs(c) < 1e-6)63 break;64 scanf("%lf %lf %lf %lf %lf %lf", x, y, x+1, y+1, x+2, y+2);65 scanf("%lf %lf %lf", t, t+1, t+2);66 printf("Case %d:\n", dd);67 t[0] *= c;68 t[1] *= c;69 t[2] *= c;70 if (solve(0, 1, 2))71 continue; 72 }73 return 0;74 }75 76 // end 77 // ism

 

转载于:https://www.cnblogs.com/ismdeep/archive/2012/05/31/2529118.html

你可能感兴趣的文章
vs2013修改书签(vs书签文件位置)
查看>>
C语言学习笔记
查看>>
PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
查看>>
PS 如何使用液化工具给人物减肥
查看>>
cvc-complex-type.2.4.c: The matching wildcard...
查看>>
android 读取json数据(遍历JSONObject和JSONArray)
查看>>
pyjamas build AJAX apps in Python (like Google did for Java)
查看>>
<JavaScript语言精粹>-读书笔记(一)
查看>>
NPM教程
查看>>
Java学习笔记(40)——Java集合12之fail-fast
查看>>
Centos 配置IP的方式
查看>>
Java 的swing.GroupLayout布局管理器的使用方法和实例
查看>>
Android中Activity和Fragment的生命周期的对比
查看>>
C++Primer_笔记_异常处理
查看>>
分区交换 alter table exchange partition 在线表 历史表交换
查看>>
zabbix详解:(二)添加被监控机器
查看>>
人像模式的灯光效果?iPhone 8开挂袭来
查看>>
Linux下MongoDB安装与配置
查看>>
DSL配置(PPPOA)
查看>>
WEBRTC执行流程
查看>>