CSP-J 2019 公交换乘

#include <bits/stdc++.h>
using namespace std;
int main() {
    long n,sum = 0;//次数 总钱数 
    cin>>n;//输入 
    long x,m,s;//方式 价格 时间 
    vector<long> m1,s1;//存储地铁的优惠券 
    bool h;//用来记录能否使用优惠券 
    for(long i = 0;i<n;i++){
        cin>>x>>m>>s;//输入 
        if(x==0){
            m1.push_back(m);//加入优惠券的钱数 
            s1.push_back(s);//加入优惠券的时间 
            sum += m;//加上钱 
        }else{
            h = false;//h为false说明不能使用优惠券 
            for(int j = 0;j<m1.size();j++){
                if(m<=m1[j] && s-s1[j]<=45){
                    h = true;//h为true说明能使用优惠券 
                    m1.erase(m1.begin()+j);//把用过的优惠券删除,以减少时间复杂度
                    s1.erase(s1.begin()+j);//把用过的优惠券删除,以减少时间复杂度
                    break;//打破循环 
                }
            }
            if(!h){//判断能否使用优惠券 
                sum += m;//加上钱 
            }
        }
        if(s-s1[0]>45 && !m1.empty()){//判断优惠券是否过期 
            m1.erase(m1.begin());//过期就删除,以减少时间复杂度 
            s1.erase(s1.begin());//过期就删除,以减少时间复杂度
        }
    }
    cout<<sum;//输出 
    return 0;
}

 

posted @ 2024-12-08 10:23  王一行(小号)  阅读(26)  评论(0)    收藏  举报