携程预赛_携程全球数据中心建设(最小生成树prim+计算几何)
来源:互联网 发布:女士内裤知乎 编辑:程序博客网 时间:2024/05/29 03:55
携程全球数据中心建设
Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 56 Accepted Submission(s) : 21
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
携程为了扩展全球在线旅游业务,决定在全球建设多数据中心,以便提高网站的访问速度和容灾处理。
为了实现每个数据中心的数据能互通,数据中心之间需要通过光纤连接。为了节约光纤成本,我们计划采用点对点方式来达到最终各个数据中心的数据互通,每个数据中心本身都可以作为数据中转站。做为全球多数据中心设计者,您需要知道最短的光纤总长度,来把所有的数据中心都实现互通。假设地球是个圆球,且表面是平滑的,并且没有任何阻碍物(河流,山脉)。
输入数据是一组数据中心的经纬度
纬度: -90° 到 +90°
经度: -180° 到 +180°
(圆周率pi= 3.14159265358979323846)
为了实现每个数据中心的数据能互通,数据中心之间需要通过光纤连接。为了节约光纤成本,我们计划采用点对点方式来达到最终各个数据中心的数据互通,每个数据中心本身都可以作为数据中转站。做为全球多数据中心设计者,您需要知道最短的光纤总长度,来把所有的数据中心都实现互通。假设地球是个圆球,且表面是平滑的,并且没有任何阻碍物(河流,山脉)。
输入数据是一组数据中心的经纬度
纬度: -90° 到 +90°
经度: -180° 到 +180°
(圆周率pi= 3.14159265358979323846)
Input
第一行第一个整数N(1≤N≤100),表示有多少个用例. 每个用例包含了:
第一行,小数D(1≤D≤1,000,000),表面圆球的直径(公里).
第二行,小数L(1≤L≤1,000,000) 光纤总长度 (公里).
第三行,整数C(1≤C≤100) ,表示数据中心的数量.
接下来的C行, 每行有2个形如"X Y"的小数,表示每个数据中心的纬度(-90≤X≤90)和经度 (-180≤Y≤180).
第一行,小数D(1≤D≤1,000,000),表面圆球的直径(公里).
第二行,小数L(1≤L≤1,000,000) 光纤总长度 (公里).
第三行,整数C(1≤C≤100) ,表示数据中心的数量.
接下来的C行, 每行有2个形如"X Y"的小数,表示每个数据中心的纬度(-90≤X≤90)和经度 (-180≤Y≤180).
Output
每个用例输出一行. 如果光纤长度L足够连接所有数据中心,输出"Y", 否则输出"N"。
Sample Input
2127425900351.3 042.5 -7548.8 312742620230.266 97.7530.45 91.1333
Sample Output
YN
Source
CodingTrip - 携程编程大赛 (预赛第一场)
解题报告
裸最小生成树,唯一复杂就是求两地球坐标的距离
double dis(double x1,double y1,double x2,double y2,double d){ double y12; if(fabs(y1-y2)>180) y12=360-fabs(y1-y2); else y12=fabs(y1-y2); return d/2*acos(sin(x1*PI/180)*sin(x2*PI/180)+cos(x1*PI/180)*cos(x2*PI/180)*cos(y12*PI/180));}
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <stdlib.h>#include <math.h>#define inf 99999999#define PI 3.14159265358979323846using namespace std;double dis(double x1,double y1,double x2,double y2,double d){ double y12; if(fabs(y1-y2)>180) y12=360-fabs(y1-y2); else y12=fabs(y1-y2); return d/2*acos(sin(x1*PI/180)*sin(x2*PI/180)+cos(x1*PI/180)*cos(x2*PI/180)*cos(y12*PI/180));}struct nodes{ double x,y;}node[1000];int m,n;double mmap[110][110];double prim(){ int u,i,j; double ans=0,minn=inf; double dis[110]; int vis[110]; for(i=0;i<n;i++) { dis[i]=mmap[0][i]; vis[i]=0; } dis[0]=0; vis[0]=1; for(i=0;i<n-1;i++) { u=0;minn=inf; for(j=1;j<=n;j++) { if(!vis[j]&&dis[j]<minn) { minn=dis[j]; u=j; } } ans+=minn; vis[u]=1; for(j=1;j<=n;j++) { if(!vis[j]&&dis[j]>mmap[u][j]) { dis[j]=mmap[u][j]; } } } return ans;}int main(){ int t,i,j; double d,l; scanf("%d",&t); while(t--) { scanf("%lf%lf%d",&d,&l,&n); memset(node,0,sizeof(node)); memset(edge,0,sizeof(edge)); for(i=0;i<n;i++) { scanf("%lf%lf",&node[i].x,&node[i].y); } m=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { mmap[i][j]=inf; } mmap[i][i]=0; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { mmap[i][j]=mmap[j][i]=dis(node[i].x,node[i].y,node[j].x,node[j].y,d); } } double ans=prim(); if(ans>l) printf("N\n"); else printf("Y\n"); } return 0;}
0 0
- 携程预赛_携程全球数据中心建设(最小生成树prim+计算几何)
- 携程第一场 第三题 携程全球数据中心建设 (最小生成树 经纬度距离)
- CodingTrip - 携程编程大赛 (预赛第一场)第三题 携程全球数据中心建设
- 携程初赛 携程全球数据中心建设 球面上两点的最短距离 + 最小生成树
- HDU 携程编程大赛 1003 携程全球数据中心建设 Prim OR Kruskal
- 携程全球数据中心建设(并查集)
- 【CodingTrip - 携程编程大赛第三场】1003 携程全球数据中心建设
- HDU 携程编程大赛 1003 携程全球数据中心建设 水题
- Prim算法计算最小生成树之和
- Prim最小生成树
- 最小生成树 prim
- 最小生成树 Prim
- 最小生成树-Prim
- Prim最小生成树
- 最小生成树 Prim
- prim最小生成树
- 最小生成树prim
- 最小生成树 prim
- seajs之grunt应用
- C语言随笔(宏 注释 词法)
- vs2005工程無法打開
- HDU Max Sum
- 第二章 创建对话框 2.1子类化QDialog(1)
- 携程预赛_携程全球数据中心建设(最小生成树prim+计算几何)
- 页面调度算法
- 在3D空间中绘制点
- 【值得每一位考研人思考】写给考研学生:凭什么让好大学要你
- js大全《二》 包含 js拖拽 打印 下载 操作收藏栏等IE工具 等常用js
- 数据挖掘——基于R文本情感分析(1)
- CMS gc实践总结(纠正并发线程数)
- 双向关联现实一对多,注解现实
- 全排列就翻译为full permutation吧