样例能过,全WA,用的优先队列,求助
查看原帖
样例能过,全WA,用的优先队列,求助
1011259
xiaweijun000楼主2024/7/5 20:21
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
	ll t,pr;
};
inline int read() {
	ll s=0,t=1;
	char c=getchar();
	while(c<'0'||c>'9') {
		if(c=='-')t=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') {
		s=s*10+c-'0';
		c=getchar();
	}
	return s*t;
}
struct node1{
	ll t,pr;
	friend bool operator < (node1 a,node1 b){
		return a.t==b.t?a.pr>b.pr:a.t>b.t;
	}
};
priority_queue<node1>q1;
queue<node>q2;
ll n,ans;
int main(){
	n=read();
	for(ll i=1;i<=n;i++){
		ll x=read();
		ll pri=read();
		ll ti=read();
		bool flg1=0;
		if(q1.empty()){
			q1.push({ti,pri});
			flg1=1;
		}
		auto p=q1.top();
		while(!q1.empty()&&ti-p.t>45){
			q1.pop();
		}
		if(x==0){
			if(flg1==0)q1.push({ti,pri});
			ans+=pri;
		//	cout<<"subway "<<ti<<' '<<pri<<endl;
		}else{
			if(!q1.empty()){
				bool flg=0;
				int ttf;
				while(!q1.empty()){
					auto p=q1.top();
					q1.pop();
					if(p.pr<pri){
						q2.push({p.t,p.pr});
					}else{
						flg=1;
				//		ttf=p.t;
						break;
					}
				}
				while(!q2.empty()){
					auto p=q2.front();
					q2.pop();
					q1.push({p.t,p.pr});
				}
				if(flg==0){
					ans+=pri;
				//	cout<<"no tickets "<<ti<<' '<<pri<<endl;
				}else{
					//cout<<"use "<<ttf<<endl;
				}
			}else{
				ans+=pri;
			//	cout<<"bus "<<ti<<' '<<pri<<endl;
			}
		}
		
	}
	cout<<ans;
	return 0;
}

2024/7/5 20:21
加载中...