AtCoder Beginner Contest 160 比赛人数9747 快,比赛开始后3分钟看到所有题
AtCoder Beginner Contest 160 E Red and Green Apples 自大到小排序+每读入一个数据,记录各种颜色苹果数量变化
总目录详见https://blog.csdn.net/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc160/tasks/abc160_e
按美味值,自大到小排序.
每读入一个数据,记录各种颜色苹果数量变化,注意:无色苹果可替代红绿苹果
时刻判定要吃的苹果,与备选的苹果是否相等。
AC代码如下
#include <algorithm>
#include <cstdio>
#define LL long long
#define maxn 600010
using namespace std;
struct node{
int v,c;
}a[maxn];
int cmp(node a,node b){
return a.v>b.v;
}
int main(){
int X,Y,A,B,C,i,cnt;//红苹果1,绿苹果2,无色苹果0
LL sum=0;
scanf("%d%d%d%d%d",&X,&Y,&A,&B,&C);
for(i=1;i<=A;i++)scanf("%d",&a[i].v),a[i].c=1;
for(i=A+1;i<=A+B;i++)scanf("%d",&a[i].v),a[i].c=2;
for(i=A+B+1;i<=A+B+C;i++)scanf("%d",&a[i].v),a[i].c=0;
sort(a+1,a+1+A+B+C,cmp);//按美味值,自大到小排序
cnt=0;//统计无色苹果数量
for(i=1;i<=A+B+C;i++)
if(a[i].c==1){//红苹果
if(X>0)X--,sum+=a[i].v;
if(X+Y==cnt)break;//无色苹果可替代红绿苹果
}else if(a[i].c==2){//绿苹果
if(Y>0)Y--,sum+=a[i].v;
if(X+Y==cnt)break;//无色苹果可替代红绿苹果
}else if(a[i].c==0){//无色苹果
cnt++;
sum+=a[i].v;
if(X+Y==cnt)break;//无色苹果可替代红绿苹果
}
printf("%lld\n",sum);
return 0;
}