文章

25

粉丝

165

获赞

52

访问

30.9k

头像
紧急支援 题解:滑动窗口
P1942 南京理工大学2023年机试题
发布于2025年3月22日 22:53
阅读数 162

方法思路
计算总步行时间:首先计算所有相邻城市之间的步行时间总和。

找到最大连续k段步行时间和:使用滑动窗口找到连续k个步行时间段的最大和。

计算最短时间:用总步行时间减去最大连续k段步行时间和,再加上飞行时间h。

解决代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, k, h;
    scanf("%d %d %d", &n, &k, &h);

    if (n == 1) {
        printf("0\n");
        return 0;
    }

    int* a = (int*)malloc((n-1) * sizeof(int));
    for (int i = 0; i < n-1; i++) {
        scanf("%d", &a[i]);
    }

    int sum_total = 0;
    for (int i = 0; i < n-1; i++) {
        sum_total += a[i];
    }

    if (k == 0) {
        printf("%d\n", sum_total);
        return 0;
    }

    // 找连续k个元素的最大和
    int max_k_sum = 0;
    int current_sum = 0;
    for (int i = 0; i < k; i++) {
        current_sum += a[i];
    }
    max_k_sum = current_sum;
    for (int i = k; i < n-1; i++) {
        current_sum += a[i] - a[i - k];
        if (current_sum > max_k_sum) {
            max_k_sum = current_sum;
        }...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发