【网易2017春招】赶去公司 解题报告
【网易2017春招】赶去公司 解题报告
标签(空格分隔): 牛客网
题目描述:
终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急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
Ways
首先,明白题意:上车点是固定的,不会说一边往上车点走,车还会对面开过来接。这样就很简单了。
方法就是遍历。把所有的上车点都去一趟,然后计算从去上车点到上车后到达公司的总时间。
另外,不能忘记,一定还要记录下来徒步走到公司的时间,然后所有的时间找出最小值即可。
#include <stdio.h>
#include<algorithm>
using namespace std;
struct Point {
int x;
int y;
} point[51];
int getDistance(Point a, Point b) {
int x = a.x > b.x ? a.x - b.x : b.x - a.x;
int y = a.y > b.y ? a.y - b.y : b.y - a.y;
return x + y;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 1; i <= n; i++) {
scanf("%d", &point[i - 1].x);
}
for (int i = 1; i <= n; i++) {
scanf("%d", &point[i - 1].y);
}
Point end;
scanf("%d%d", &end.x, &end.y);
int walkTime, taxiTime;
scanf("%d%d", &walkTime, &taxiTime);
Point start;
start.x = start.y = 0;
int ans[n];
for (int i = 0; i < n; i++) {
int disW = getDistance(start, point[i]);
int disT = getDistance(point[i], end);
ans[i] = walkTime * disW + taxiTime * disT;
}
int answer = 0x7fffffff;
for (int j = 0; j < n; ++j) {
if (answer > ans[j]) {
answer = ans[j];
}
}
int direct = getDistance(start, end);
int ansD = walkTime * direct;
if (answer > ansD) {
answer = ansD;
}
printf("%d\n", answer);
}
return 0;
}
Date
2017 年 3 月 29 日