1 条题解

  • 0
    @ 2025-10-22 16:47:07

    题解

    (请在此补充题目的中文题解与思路描述。)

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    inline int read(){
       int s=0, w=1;
       char ch = getchar();
       while (ch < '0' || ch > '9') {if (ch == '-') w = -1; ch = getchar();}
       while (ch >= '0' && ch <= '9') s = (s<<3)+(s<<1) + ch - '0', ch = getchar();
       return s * w;
    }
    inline void put(int x){
       if(!x)putchar('0');
       if(x<0)putchar('-'),x=-x;
       int num(0);char c[66];
       while(x)c[++ num]=x%10+48,x/=10;
       while(num)putchar(c[num --]);
       return (void)(putchar('\n'));
    }
    int n,m,k,a[100005],s[100005],c[100005],x[100005],ask[100005],ans[2000005],N=1e5,cnt[100005],tot;
    struct node{
    	int w,id;
    	bool friend operator<(node a,node b){
    		return a.w<b.w;
    	}
    };priority_queue<node>q;
    vector<node>tmp[100005];
    signed main(){
    	n=read(),m=read(),k=read();
    	for(int i=1;i<=n;i++){
    		a[i]=read(),s[i]=read(),c[i]=read(),x[i]=read();
    		if(!x[i])tmp[N].push_back({a[i]+s[i],i});
    		else tmp[min(N,(c[i]-1)/x[i]+1)].push_back({a[i]+s[i],i});
    	}
    	for(int i=1;i<=k;i++)ask[i]=read();
    	for(int i=N;i>=1;i--){
    		for(auto v:tmp[i])q.push(v);
    		int res=m;vector<node>tp;
    		while(res&&q.size()){
    			int t=q.top().id;q.pop();
    			if(!cnt[t]){
    				cnt[t]++,res--;
    				if(c[t]>1)q.push({a[t],t});
    			}
    			else{
    				int now=min(c[t]-(i-1)*x[t]-cnt[t],res);
    				res-=now,cnt[t]+=now;
    				if(cnt[t]<c[t])tp.push_back({a[t],t});
    			}
    		}
    		for(auto v:tp)q.push(v);
    	}
    	for(int i=1;i<=n;i++){
    		if(cnt[i])ans[++tot]=a[i]+s[i];
    		for(int j=2;j<=cnt[i];j++)ans[++tot]=a[i];
    	}
    	sort(ans+1,ans+tot+1),reverse(ans+1,ans+tot+1);
    	for(int i=1;i<=tot;i++)ans[i]+=ans[i-1];
    	for(int i=1;i<=k;i++)put(ans[min(tot,ask[i]*m)]);
    }
    
    • 1

    信息

    ID
    3715
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者