题解+思路
2025-05-09 21:51:59
发布于:广东
4阅读
0回复
0点赞
解题思路:
-
数据读取与存储:
- 从输入中读取乘车记录的数量
n
。 - 对于每一条乘车记录,读取交通工具类型(0 代表地铁,1 代表公交车)、票价
price
和乘车时间t
。 - 使用一个结构体数组
s
来存储每次乘坐地铁时获得的优惠票信息,包括优惠票是否可用(flag
)、获得优惠票的时间(time
)以及乘坐地铁的票价(price
)。
- 从输入中读取乘车记录的数量
-
处理乘坐地铁的情况:
- 当交通工具类型为 0(地铁)时,在结构体数组
s
中新增一条记录,设置flag
为true
表示该优惠票可用,记录当前时间t
作为获得优惠票的时间,同时记录地铁票价price
。 - 将乘坐地铁的票价累加到总花费
sum
中。
- 当交通工具类型为 0(地铁)时,在结构体数组
-
处理乘坐公交车的情况:
- 当交通工具类型为 1(公交车)时,遍历结构体数组
s
中已有的优惠票记录。 - 对于每一条优惠票记录,如果该优惠票可用(
flag
为true
),且当前公交车的乘车时间t
与获得优惠票的时间time
之差小于等于 45 分钟,并且公交车的票价price
不超过获得优惠票时乘坐地铁的票价。满足这些条件时,将该优惠票的flag
设置为false
表示已使用。 - 如果遍历完所有优惠票后,没有找到可用的优惠票(即
check
为true
),则将公交车的票价累加到总花费sum
中。
- 当交通工具类型为 1(公交车)时,遍历结构体数组
-
输出结果:
- 最后,输出总花费
sum
,即小轩出行的总花费。
- 最后,输出总花费
题解
#include <iostream>
using namespace std;
using ll = long long;
const int N = 1e5 + 5; // 增大数组大小
int arr[N];
struct Free
{
bool flag;
int time;
int price; // 新增:记录地铁票价
} s[N];
int main()
{
int n, index = 1;
cin >> n;
ll sum = 0;
while (n--)
{
int tool, price, t;
cin >> tool >> price >> t;
if (tool == 0)
{
s[index].flag = true;
s[index].time = t; // 直接存储绝对时间
s[index].price = price; // 记录地铁票价
sum += price;
index++;
}
else
{
bool check = true;
for (int i = 1; i < index; i++) // 从 1 开始遍历有效优惠票
if (s[i].flag == true && s[i].time + 45 >= t && price <= s[i].price)
{
s[i].flag = false;
check = false;
break;
}
if (check == true)
sum += price;
}
}
cout << sum << endl;
return 0;
}
这里空空如也
有帮助,赞一个