1 条题解
-
0
经典的题目
#include <bits/stdc++.h> using namespace std; struct node { long long t;//乘坐的时间 int pri;//价格/优惠券的面值 int used;//是否被使用 }; queue<node> p;//存放地铁的相关信息,先进先出适合处理时间顺序问题 int opt, price; long long ti;//乘坐交通工具的时间 int n; long long sum = 0;//总费用 int main() { cin >> n; node x; for (int i = 1; i <= n; i++) { cin >> opt >> price >> ti; if (opt == 0) {//乘坐地铁,直接将优惠券的面值和时间存入 sum += price; x = {ti, price, 0}; p.push(x); } else { //循环判断是否存在超过当前乘坐时间45分钟的优惠券,有则删除 while (ti - p.front().t > 45) { p.pop(); } //遍历剩下的队列,看队列中是否存在优惠券面值大于或等于当前票价的 bool flag = false; int len = p.size(); while (len--) {// !p.empty() p.size() if (price <= p.front().pri && p.front().used == 0 && flag == false && ti - p.front().t <= 45) { //如果有,则标记为已找到,并且被使用 p.front().used = 1; flag = true; } //将不符合小于当前票价的优惠券的重新入队 p.push(p.front()); p.pop(); } //没有找到,则将费用计算到总费用中 if (flag == false)sum += price; } } cout << sum; return 0; }
- 1
信息
- ID
- 946
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 4
- 上传者