题解
2026-08-23 20:02:14
发布于:浙江
6阅读
0回复
0点赞
我觉得这个代码最简单易懂了
#include<bits/stdc++.h>
using namespace std;
struct node{
bool c;//判断是否是地铁或公交
int p,t;//当前的花费和时间
}a[100023];
int n,ans;//ans记录花费
bool st[100023];
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].c>>a[i].p>>a[i].t;
for(int i=1;i<=n;i++){//遍历n次坐车的情况
if(a[i].c==0)ans+=a[i].p;//总花费+地铁的票价
else{
int flag=0;
for(int j=i-1;j>=1;j--){//从后往前查找出最靠前的符合的一张
if(a[i].t-a[j].t>45)break;//当前的一张超时后面的都不行
if(a[j].c==1||st[j])continue;//如果这个位置没有产生任何优惠券或已经被用掉了
if(a[j].p>=a[i].p)flag=j;//当前j这张可以用
}
if(flag==0)ans+=a[i].p;//当前没有符合的优惠券
else st[flag]=1;//如果有优惠券可以使用,那就使用掉
}
}
cout<<ans<<endl;
return 0;
}
这里空空如也






有帮助,赞一个