首页 > 代码库 > 2、赶去公司--网易2017春招
2、赶去公司--网易2017春招
[编程题] 赶去公司
时间限制:1秒
空间限制:32768K
终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug。假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上。小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司。每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车将花费taxiTime时间。小易需要尽快赶到公司去,现在小易想知道他最快需要花费多少时间去公司。
输入描述:
输入数据包括五行:
第一行为周围出租车打车点的个数n(1 ≤ n ≤ 50)
第二行为每个出租车打车点的横坐标tX[i] (-10000 ≤ tX[i] ≤ 10000)
第三行为每个出租车打车点的纵坐标tY[i] (-10000 ≤ tY[i] ≤ 10000)
第四行为办公室坐标gx,gy(-10000 ≤ gx,gy ≤ 10000),以空格分隔
第五行为走路时间walkTime(1 ≤ walkTime ≤ 1000)和taxiTime(1 ≤ taxiTime ≤ 1000),以空格分隔
输出描述:
输出一个整数表示,小易最快能赶到办公室的时间
输入例子:
2 -2 -2 0 -2 -4 -2 15 3
输出例子:
42
解题思路:本题定义结构体存储各点的横坐标、纵坐标、距离起始点的距离、距离终点的距离、以及经过该点到达终点总用时。按点进行遍历,获得最小时间。
注意点:1)有可能完全走着的时间更小,因此min初始值为完全走着的时间
2)输入的格式,不是按照一个点分别输入横纵坐标,而是先输入所有点的横坐标,然后再 输入所有点的纵坐标
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 struct Point 5 { 6 int x; 7 int y; 8 int dis0; 9 int dis1; 10 int sum; 11 }; 12 int main() 13 { 14 int n; 15 while(cin>>n) 16 { 17 Point p[n+1]; 18 for(int i=0;i<n;i++) 19 { 20 cin>>p[i].x; 21 } 22 for(int i=0;i<n;i++) 23 { 24 cin>>p[i].y; 25 } 26 cin>>p[n].x>>p[n].y; 27 int walktime; 28 int taxitime; 29 int min; 30 int walk; 31 cin>>walktime>>taxitime; 32 for(int i=0;i<n;i++) 33 { 34 p[i].dis0 = abs(p[i].x) + abs(p[i].y); 35 p[i].dis1 = abs(p[n].x - p[i].x) + abs(p[n].y - p[i].y); 36 p[i].sum = p[i].dis0 * walktime + p[i].dis1 * taxitime; 37 } 38 walk = abs(p[n].x) + abs(p[n].y); 39 min = walk*walktime; 40 for(int i=0;i<n;i++) 41 { 42 if(p[i].sum < min) 43 min = p[i].sum; 44 } 45 cout<<min<<endl; 46 } 47 return 0; 48 }
2、赶去公司--网易2017春招
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。