求助, 思路很清晰的模拟,问题在哪?
查看原帖
求助, 思路很清晰的模拟,问题在哪?
508257
kyries楼主2022/9/20 19:03
#include<bits/stdc++.h>

using namespace std;

const int N = 1e6+10;
struct node{
    int ttime;
    int prize;
    bool flag = false;
}q[N];
int tt = -1, hh = 0;
int n, tpr;

int main()
{
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
        char op[2];
        int pr, t;
        cin>>op>>pr>>t;
        if(op == "0")//地铁,获得一张优惠券
        {
            cin>>pr>>t;
            tpr += pr;
            tt++;
            q[tt].ttime = t + 45;//存储保质期, 金额限定 
            q[tt].prize = pr;
        }
        else//公交车,遍历钱包,找能用的优惠券 
        {
            bool uflag = false;
            
            if(!q[hh].flag && t <= q[hh].ttime && pr <= q[hh].prize)//先判断最早的吧
            {
                hh++;
                uflag = true;
            }
            else
            {
                for(int i = hh + 1; i <= tt; i ++)//遍历钱包
                {
                    if((!q[i].flag) && (t <= q[i].ttime) && (pr <= q[i].prize))//选择时间,价格合适的
                    {
                        q[i].flag = true;//用掉,把所有比此张车票早的车票扔掉
                        uflag = true;
                        break;
                    }
                }
            }
            
            if(!uflag)//如果没有用优惠券
            {
                tpr += pr;
            }
        }
    }
    printf("%d\n", tpr);
    return 0;
}
2022/9/20 19:03
加载中...