题解:P12980 [GCJ 2022 Qualification] 3D Printing
题目大意:
有三台打印机,每个打印机有四种颜料,需要用 IMPOSSIBLE,否则输出四种颜料的数量。
思路:
要打印出同一种颜色,肯定是每一种颜色都足够,所以我们先求出四种颜色数量的最小值,它们的总和再去和 IMPOSSIBLE,否则去删减,直到四种颜色数量加起来等于
代码:
#include<bits/stdc++.h>
#define MAXX INT_MAX-1
using namespace std;
int c,m,y,k;
int main(){
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++){
int mc=MAXX,mm=MAXX,my=MAXX,mk=MAXX; // 注意要赋最大值。
for(int j=1;j<=3;j++){ // 求最小值。
scanf("%d%d%d%d",&c,&m,&y,&k);
mc=min(mc,c);
mm=min(mm,m);
my=min(my,y);
mk=min(mk,k);
}
if(mc+mm+my+mk>=1000000){
int p=mc+mm+my+mk-1000000; // 删减。
if(p>=mc){
p-=mc;
mc=0;
if(p>=mm){
p-=mm;
mm=0;
if(p>=my){
p-=my;
my=0;
if(p>=mk){
p-=mk;
mk=0;
} else{
mk-=p;
}
} else{
my-=p;
}
} else{
mm-=p;
}
} else{
mc-=p;
}
printf("Case #%d: %d %d %d %d\n",i,mc,mm,my,mk);
} else{
printf("Case #%d: IMPOSSIBLE\n",i);
}
}
return 0;
}