记录编号 605614 评测结果 AAAAA
题目名称 284.[NOI 1999]内存分配 最终得分 100
用户昵称 GravatarHollow07 是否通过 通过
代码语言 C++ 运行时间 0.261 s
提交时间 2025-09-05 18:51:32 内存使用 3.75 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll n,m,w,ans;
struct node{
	ll t,m,p,id;
}a;
vector<node> p;
queue<node> q;

bool cmp(node a,node b){
	return a.id<b.id;
}

bool workin(ll t){
	if(p.empty()||p[0].id>=a.m){
		a.id=0;
		a.t=t;
		p.push_back(a);
		sort(p.begin(),p.end(),cmp);
		return 1;
	}
	ll k=p.size();
	for(int i=1;i<k;i++){
		if(p[i].id-(p[i-1].id+p[i-1].m)>=a.m){
			a.id=p[i-1].id+p[i-1].m;
			a.t=t;
			p.push_back(a);
			sort(p.begin(),p.end(),cmp);
			return 1;
		}
	}
	ll zn=k-1;
	if(n-(p[zn].id+p[zn].m)>=a.m){
			a.id=p[zn].id+p[zn].m;
			a.t=t;
			p.push_back(a);
			sort(p.begin(),p.end(),cmp);
			return 1;
	}
	return 0;
}
void workout(){
	ll nw=1e9;
	for(int i=0;i<p.size();i++){
		if(p[i].t+p[i].p==w){
			p.erase(p.begin()+i);i--;
		}else{
			nw=min(nw,p[i].t+p[i].p);
		}
	}
	while(q.size()){
		a=q.front();
		if(workin(w)){
			nw=min(nw,a.t+a.p);
			q.pop();
			ans++;
		}
		else break;
	}
	w=nw;
}
void work(ll t,ll m,ll p){
	while(t>=w)workout();
	a.t=t;
	a.m=m;
	a.p=p;
	if(workin(t))w=min(w,t+p);
	else q.push(a);
}
int main(){
	freopen("memory.in","r",stdin);
	freopen("memory.out","w",stdout);
	cin>>n;
	for(int gg=1;gg;gg++){
		ll x,y,z;
		cin>>x>>y>>z;
		if(x==0&&y==0&&z==0){
			m=gg-1;
			break;
		}
		work(x,y,z);
	}
	while(q.size()){
		workout();
	}
	ll anss=0;
	for(int i=0;i<p.size();i++){
		anss=max(anss,p[i].t+p[i].p);	
	}
	cout<<anss<<"\n"<<ans;
	return 0;
}