求大神教题

题目总版

ss_yangzirui @ 2024-11-10 12:52:00

问题 C: 201812DLOI小甲 第三题 路程(2.2) 内存限制:256 MB 时间限制:1.000 S 评测方式:文本比较 命题人:外部导入 提交:131 解决:59 题目描述 有一台汽车要总共行使S秒。一开始汽车的速度是0米每秒。接下来有N个指令,第i个指定的格式是:Mi 和 Ci,表示的意义是:从第Mi秒开始,速度比之前增加Ci。问汽车总共行使的总路程是多少。

输入 第一行,两个整数: S和N。 1 <= S <= 1000000000。 1 <= N <= 100 接下来有N行,第i行是:Mi 和 Ci。 1 <= Ci <= 1000。 1 <= Mi <= S。

输出 一个整数。 输入样例: 1000 1
1 1000 输出样例:1000000


by Ayden_Jobs @ 2024-11-10 19:43:18

#include <bits/stdc++.h>
using namespace std;
// 定义一个结构体来存储每个指令
struct Command {
    int start;
    int increase;
};
// 计算汽车行驶的总路程
long long calculateDistance(int S, int N, vector<Command>& commands) {
    long long totalDistance = 0;
    int currentSpeed = 0; 
    // 按照开始时间对指令进行排序
    sort(commands.begin(), commands.end(), [](const Command& a, const Command& b) {
        return a.start < b.start;
    });
    // 遍历每个指令
    for (int i = 0; i < N; ++i) {
        // 计算当前指令开始前汽车行驶的距离
        if (i == 0) {
            // 第一个指令,从0秒开始
            totalDistance += commands[i].start * currentSpeed;
        } else {
            // 非第一个指令,加上前一个指令结束到当前指令开始之间的距离
            totalDistance += (commands[i].start - commands[i-1].start) * currentSpeed;
        }
        // 更新当前速度
        currentSpeed += commands[i].increase;
        // 加上当前指令持续时间内汽车行驶的距离
        totalDistance += (S - commands[i].start) * currentSpeed;
    }
    return totalDistance;
}
int main() {
    int S, N;
    cin >> S >> N; 
    vector<Command> commands(N);
    // 读取指令
    for (int i = 0; i < N; ++i) {
        cin >> commands[i].start >> commands[i].increase;
    }
    // 计算并输出总路程
    cout << calculateDistance(S, N, commands) << endl;
    return 0;
}

这个程序首先定义了一个Command结构体来存储每个指令的开始时间和速度增加量。然后定义了一个calculateDistance函数来计算总路程。在main函数中,程序读取输入,调用calculateDistance函数计算总路程,并输出结果。


|