比赛 |
20250904开学热身赛 |
评测结果 |
WWWWW |
题目名称 |
内存分配 |
最终得分 |
0 |
用户昵称 |
二乾五 |
运行时间 |
3.024 s |
代码语言 |
C++ |
内存使用 |
4.41 MiB |
提交时间 |
2025-09-04 20:49:18 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define cpy(a,b) copy(begin(a),end(a),begin(b))
#define ld long double
#define dot(x) fixed<<setprecision(x)
#define foru(a,b,c) for(ll a=b;a<=c;a++)
ll n,num=1,t[10005],m[10005],p[10005],ans;
struct program{
ll id,t,op;//进程id,时间,1入0出
};
vector<program>timelist;
struct memorylist{
ll l,r;
}used_[10005];
vector<memorylist>free_;
queue<ll>waitlist;
bool tlcmp(program a,program b){
if(a.t!=b.t){
return a.t<b.t;
}else{
return a.op<b.op;
}
}
bool mlcmp(memorylist a,memorylist b){
return a.l<b.l;
}
int main(){
freopen("memory.in" ,"r",stdin );
freopen("memory.out","w",stdout);
cin>>n;
while(cin>>t[num]>>m[num]>>p[num]&&!(t[num]+m[num]+p[num]==0)){
timelist.push_back({num,t[num],1});
timelist.push_back({num,t[num]+p[num],0});
num++;
}
sort(timelist.begin(),timelist.end(),tlcmp);
num--;
bool sorted=1;
free_.push_back({0,n});
for(auto x:timelist){
if(x.op){
if(!waitlist.empty()&&!sorted){
sort(free_.begin(),free_.end(),mlcmp);
for(ll i=1;i<free_.size();i++){
if(free_[i-1].r==(free_[i].l-1)){
free_[i-1].r=free_[i].r;
free_[i]={1,0};
}
}
sorted=1;
while(!waitlist.empty()){
bool ok=0;
ll f=waitlist.front();
for(auto i:free_){
if(i.r-i.l+1>=m[f]){
used_[f]={i.l,i.l+m[f]-1};
i.l+=m[f];
ok=1;
break;
}
}
if(!ok){
break;
}
}
}
if(!sorted){
sort(free_.begin(),free_.end(),mlcmp);
for(ll i=1;i<free_.size();i++){
if(free_[i-1].r==(free_[i].l-1)){
free_[i-1].r=free_[i].r;
free_[i]={1,0};
}
}
sorted=1;
}
bool ok=0;
for(auto i:free_){
if(i.r-i.l+1>=m[x.id]){
used_[x.id]={i.l,i.l+m[x.id]-1};
i.l+=m[x.id];
ok=1;
break;
}
}
if(!ok){
waitlist.push(x.id);
ans++;
}
}else{
sorted=0;
ll tl=used_[x.id].l,tr=used_[x.id].r;
free_.push_back({tl,tr});
}
}
cout<<t[num]+p[num]<<"\n"<<ans;
return 0;
}