比赛 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;
}