题解
2025-10-06 21:57:23
发布于:福建
6阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
typedef long long ull;
ull n,q,w,e;//q,w,e分别用于存压缩机,冷凝器,蒸发器数量
ull z,x,c;//分别为压缩机,冷凝器,蒸发器损坏数量
ull ans1,ans2,ans3;//分别为压缩机,冷凝器,蒸发器修好所用花费
struct node
{
ull a,b,c;
}ac[1000010];//分别为压缩机,冷凝器,蒸发器状态
vector<ull>f;//压缩机待修理维修成本
vector<ull>g;//冷凝器待修理维修成本
vector<ull>h;//蒸发器待修理维修成本
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>ac[i].a>>ac[i].b>>ac[i].c;//输入
if(ac[i].a==-1)z++;
if(ac[i].b==-1)x++;
if(ac[i].c==-1)c++;
if(ac[i].a>0)f.push_back(ac[i].a);//如果待修理,则加入数组
if(ac[i].b>0)g.push_back(ac[i].b);//同理
if(ac[i].c>0)h.push_back(ac[i].c);//同理
}
cin>>q>>w>>e;
q-=z;w-=x;e-=c;//-1只能更换新零件
if(q>=f.size())ans1=0;//剩余大于待修理个数
else{
sort(f.begin(),f.end());
for(int i=0;i<f.size()-q;i++){
ans1+=f[i];
}
}//取最小
if(w>=g.size())ans2=0;
else{
sort(g.begin(),g.end());
for(int i=0;i<g.size()-w;i++){
ans2+=g[i];
}
}//同理
if(e>=h.size())ans3=0;
else{
sort(h.begin(),h.end());
for(int i=0;i<h.size()-e;i++){
ans3+=h[i];
}
}//同理
printf("%lld",ans1+ans2+ans3);//输出答案
}
这里空空如也







有帮助,赞一个