萌新求助简单题
查看原帖
萌新求助简单题
927266
bbbbbbbbbbbbbbbbbbb楼主2025/6/28 14:42

WA 345

#include<bits/stdc++.h>
using namespace std;
int n,otim=1e9+7;
int ans,cnt;
struct node{
	int t,m,p,s;
	bool operator <(const node &x)const{
		return s<x.s;
	}
}l;
vector<node> q;
queue<node> p;
bool work_in(int x){
	if(q.empty()||q[0].s>=l.m){
		l.s=0;
		l.t=x;
		q.push_back(l);
		sort(q.begin(),q.end());
		return 1;
	}
	for(int i=1;i<q.size();i++){
		if(q[i].s-q[i-1].s-q[i-1].m>=l.m){
			l.s=q[i-1].s+q[i-1].m;
			l.t=x;
			q.push_back(l);
			sort(q.begin(),q.end());
			return 1;
		}
	}
	if(n-q.back().s-q.back().m>=l.m){
		l.s=q.back().s+q.back().m;
		l.t=x;
		q.push_back(l);
		sort(q.begin(),q.end());
		return 1;
	}
	return 0;
}
void work_out(){
	vector<node> new_q;
	for(auto x:q){
		if(x.t+x.p>otim) new_q.push_back(x);
	}
	q=new_q;
	sort(q.begin(),q.end());
	int nw=1e9+7;
	while(!p.empty()){
		l=p.front();
		if(work_in(otim)){
			nw=min(nw,l.t+l.p);
			p.pop();
		}
		else break;
	}
	for(auto x:q){
		nw=min(nw,x.t+x.p);
	}
	otim=nw;
}
void work(int t,int m,int pp){
	if(t>=otim) work_out();
	l.t=t,l.m=m,l.p=pp;
	if(work_in(t)) {
		otim=min(otim,l.t+l.p);
//		cout<<t<<' '<<m<<' '<<pp<<'\n';
	}
	else p.push(l),cnt++;
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	int t,m,pp;
	while(cin>>t>>m>>pp&&(m!=0)){
		work(t,m,pp);
	}
	while(!p.empty()) work_out();
	int ans=otim;
	for(auto [t,m,pp,s]:q){
		ans=max(ans,t+pp);
	}
	cout<<ans<<'\n'<<cnt;
	return 0;
}
2025/6/28 14:42
加载中...