1 条题解

  • 0
    @ 2025-7-6 17:00:17
    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 100000;
    int n;
    // 类型 0/1 地铁、公交,票价、时间
    int typ[MAXN + 5], pri[MAXN + 5], t[MAXN + 5];
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> typ[i] >> pri[i] >> t[i];
        int ans = 0;
        for (int i = 1; i <= n; i++)
        {
            if (typ[i] == 0)
                ans += pri[i];
            else
            {
                // 有没有能用的优惠票要用
                // 前 45 分钟内,有没有票价大于等于当前价格的地铁
                // 如果有多个,留下第一个
                bool flag = false;
                // 只需要看 45 分钟以内的,而每次记录时间都不一样,所以只要看最近 45 条记录
                for (int j = max(1, i - 45); j <= i - 1; j++)
                {
                    if (typ[j] == 0 &&
                        t[i] - t[j] <= 45 &&
                        pri[j] >= pri[i])
                    {
                        flag = true;
                        typ[j] = 1;
                        break;
                    }
                }
                if (!flag)
                    ans += pri[i];
            }
        }
        cout << ans;
    
        return 0;
    }
    
    • 1

    信息

    ID
    6408
    时间
    1000ms
    内存
    250MiB
    难度
    2
    标签
    递交数
    8
    已通过
    3
    上传者