题解 | #公交换乘#
公交换乘
https://ac.nowcoder.com/acm/problem/54632
#include<iostream>
using namespace std;
struct s{
int num; //0 地铁
int p; //价钱
int t; //乘车时间
}a[100010];
int main()
{
int n,p,t;
long long ans=0; //花费
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].num>>a[i].p>>a[i].t;
ans+=a[i].p; //先加总价
}
for(int i=0;i<n;i++){ //只判断地铁,是否可以优惠45分钟后的公交
if(a[i].num==0){
int j=i+1;
while(a[j].t-a[i].t<=45&&j<n){ //找最近,满足要求的公交
if(a[j].num==1&&a[i].p>=a[j].p){
ans-=a[j].p; //扣除这个价钱
a[j].num=2; //标记为已优惠
break;
}j++;
}
}
}
cout<<ans;
return 0;
}