1 条题解

  • 1
    @ 2023-7-19 14:24:29

    队列!!!

    Python

    n = int(input())
    trans = []
    # 队列存储失效时间
    q = [0]*n
    tail,head = 0,0
    sum = 0
    
    for i in range(n):
        t = list(map(int,input().split()))
        trans.append(t)
    
    for i in trans:
        if i[0] == 0:
            q[tail] = i[2]+45
            tail+=1
            sum+=i[1]
        else:
            # 找到第一张可以用的优惠券,把失效的删去
            while head!=tail and q[head]<i[2]:
                head+=1
            # 没有优惠劵了QwQ
            if head == tail:
                sum+=i[1]
            # 用掉优惠券
            else:
                head+=1
    
    print(sum)
    

    C++

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1005;
    
    int n,sum;
    
    struct Point
    {
    	int op,price,time;
    }trans[N];
    
    queue<int> q;
    vector<Point> p;
    
    int main()
    {
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		int x,y,z;
    		cin >> x >> y >> z;
    		p.push_back({x,y,z});
    	}
    	for(auto it:p)
    	{
    		if(it.op == 0)
    		{
    			q.push(it.time+45);
    			sum+=it.price;
    		}
    		else
    		{
    			// 找到第一张可以用的优惠券,把失效的删去
    			while(!q.empty() && q.front()<it.time)
    				q.pop();
    			// 没有优惠劵了QwQ
    			if(q.empty())
    				sum+=it.price;
    			// 用掉优惠券
    			else
    				q.pop();
    		}
    	}
    	cout << sum;
    	return 0;
    }
    
    • 1

    信息

    ID
    799
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    689
    已通过
    214
    上传者