题解:P12980 [GCJ 2022 Qualification] 3D Printing

· · 题解

题目大意:

有三台打印机,每个打印机有四种颜料,需要用 10^6 的颜料打印一个 D ,若三台打印机均可打印D 的颜色不存在,输出IMPOSSIBLE,否则输出四种颜料的数量。

思路:

要打印出同一种颜色,肯定是每一种颜色都足够,所以我们先求出四种颜色数量的最小值,它们的总和再去和 10^6 进行比较,若不够则输出IMPOSSIBLE,否则去删减,直到四种颜色数量加起来等于 10^6

代码:

#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;
}