【网易2017春招】赶去公司 解题报告

【网易2017春招】赶去公司 解题报告

标签(空格分隔): 牛客网


题目地址:https://www.nowcoder.com/questionTerminal/5c7657015d3d49369c49dd047e80b526?orderByHotValue=0&questionTypes=000100&page=1&onlyReference=false

题目描述:

终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急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 日

posted @ 2017-03-29 22:30  负雪明烛  阅读(12)  评论(0编辑  收藏  举报