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函数计算总路程,并输出结果。