样例都能过,但评测TLE加WA
查看原帖
样例都能过,但评测TLE加WA
1115386
dingxiangqian楼主2025/6/25 09:49

用的是优先队列做法

#include<iostream>
#include<queue>
using namespace std;
struct ticket
{
	int kind,price,time;
	bool operator <(const ticket &a)const
	{
		return time>a.time;
	}
};
priority_queue<ticket>q;
queue<ticket>m;
int n;
int main()
{
	cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		int k,p,t;
		cin>>k>>p>>t;
		if(!k)
		{
			q.push({k,p,t});
			ans+=p;
		}
		else
		{
			ticket cur=q.top();
			q.pop();
			while(t-cur.time>45&&!q.empty())
			{
				cur=q.top();
				q.pop();
			}
			if(t-cur.time>45)
			{
				ans+=p;
				continue; 
			}
			while(p>cur.price&&!q.empty())
			{
				m.push(cur);
				cur=q.top();
				q.pop();
				
			}
			ticket k;
			while(!m.empty())
			{
				k=m.front();
				q.push(k);
				m.pop();
			}		
			q.push(k);	 
			if(p>cur.price)
			{
				ans+=p;
				continue; 
			}
		}
	}
	cout<<ans;
	 
}
2025/6/25 09:49
加载中...