比赛 |
20250904开学热身赛 |
评测结果 |
WWWWW |
题目名称 |
内存分配 |
最终得分 |
0 |
用户昵称 |
彭欣越 |
运行时间 |
0.514 s |
代码语言 |
C++ |
内存使用 |
3.76 MiB |
提交时间 |
2025-09-04 21:54:40 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,t,sm,w,k,ans1,ans2;
int a,b,c;
struct node {
int t,m,p,s;
};
bool cmp (node x,node y) {
return x.s<y.s;
}
queue<node>q;
vector<node>v;
void judge () {
while (!q.empty()) {
node p=q.front();
if (v.size()==0) sm=1,t=n;
sort(v.begin(),v.end(),cmp);
int nw=1e9+10;
for (int i=0;i<v.size();i++) {
int sum=v[i].m,tt=v[i].s,s=v[i].s,m=v[i].m;
if (a>=v[i].t+v[i].p) {
v.erase(v.begin()+i--);
if (i==-1) sum+=s-1,tt=1;
else sum+=s-v[i].m-v[i].s,tt=v[i].s+v[i].m;
if (i==v.size()-1) sum+=n-s-m+1;
else sum+=v[i+1].s-s-m;
}else{
nw=min(nw,v[i].t+v[i].p);
if (i==0&&s!=1) {
tt=1;
sum=s-1;
if (tt<sm&&sum>=p.m) {
sm=tt;
t=sum;
}
continue;
}
if (i==v.size()-1) {
tt=s+m;
sum=n-s-m+1;
if (tt<sm&&sum>=p.m) {
sm=tt;
t=sum;
}
}
tt=v[i-1].s+v[i-1].m;
sum=s-tt;
}
if (tt<sm&&sum>=p.m) {
sm=tt;
t=sum;
}
}
w=nw;
if (sm!=0&&t!=0) {
v.push_back((node){a,p.m,p.p,sm});
//cout << a <<' '<< p.p <<endl;
q.pop();
}else break;
}
}
int main(){
freopen("memory.in","r",stdin);
freopen("memory.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
while (cin >> a >> b >> c) {
if (a==0&&b==0&&c==0) break;
sm=n+1,t=0;
int nw=1e9+10;
if (!q.empty()) judge();
sm=n+1,t=0;
//cout << q.size() <<endl;
//for (int i=0;i<v.size();i++) {
// cout << v[i].s <<' '<< v[i].m <<' '<< v[i].t <<' '<< v[i].p <<endl;
//}
if (v.size()==0) sm=1,t=n;
sort(v.begin(),v.end(),cmp);
for (int i=0;i<v.size();i++) {
//if (!q.empty()) break;
int sum=v[i].m,tt=100010,s=v[i].s,m=v[i].m;
if (a>=v[i].t+v[i].p) {
//cout << "qwq" <<endl;
v.erase(v.begin()+i--);
if (i==-1) sum+=s-1,tt=1;
else sum+=s-v[i].m-v[i].s,tt=v[i].s+v[i].m;
if (i==v.size()-1) sum+=n-s-m+1;
else sum+=v[i+1].s-s-m;
}else{
nw=min(nw,v[i].t+v[i].p);
//cout << nw <<endl;
if (i==0&&s!=1) {
tt=1;
sum=s-1;
//cout << "qwq" <<endl;
if (tt<sm&&sum>=b) {
sm=tt;
t=sum;
}
continue;
}
if (i==v.size()-1) {
// cout << "qwq" <<' '<< s+m <<' '<< n-s-m+1 <<endl;
tt=s+m;
sum=n-s-m+1;
//cout << tt <<' '<< sum <<' '<< s <<' '<< t <<endl;
if (tt<sm&&sum>=b) {
sm=tt;
t=sum;
}
}
if (v[i-1].s+v[i-1].m<v[i].s) tt=v[i-1].s+v[i-1].m,sum=s-tt;
}
if (tt<sm&&sum>=b) {
sm=tt;
t=sum;
}
}
w=nw;
if (sm!=0&&t!=0) {
v.push_back((node){a,b,c,sm});
//cout << a <<' '<< c <<' '<< sm <<' '<< b <<' '<< "qwq" <<endl;
continue;
}
//cout << a << b << c <<endl;
q.push((node){a,b,c,0});
ans2++;
}
while (!q.empty()) {
a=w;
judge();
}
for (int i=0;i<v.size();i++) {
ans1=max(w,v[i].t+v[i].p);
}
cout << ans1 <<endl;
cout << ans2 <<endl;
return 0;
}