範例程式碼 uva10626

//uva10626
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int kase;
    cin>>kase;
    while (kase--){
        int c, n[3];
        cin>>c>>n[0]>>n[1]>>n[2];
        int used[3] = {0}, cnt=0;

        int tmp = min(c, n[2]);
        used[2] += tmp;
        n[0] += tmp*2;
        cnt += tmp;
        c -= tmp;
        if (c==0) {
            cout<<cnt<<endl;
            continue;
        }

        tmp = min(c, n[1]/2);
        used[1] += tmp*2;
        cnt += tmp*2;
        c -= tmp;
        n[0] += tmp*2;
        if(c==0){
            cout<<cnt<<endl;
            continue;
        }
        int cover[3]={0};
        if(c>0 && n[1]-used[1]>0){
            --c;
            cnt+=4;
            used[1]++;
            used[0]+=3;
            cover[1]++;
        }
        used[0]+=8*c;
        cnt+=8*c;
        c=0;
        for(int i=0;i<150;++i){
            if(used[1]-cover[1]>1 && used[0]-cover[0]>=8){
                cover[1]+=2;
                cover[0]+=6;
                n[0]-=2;
                used[0]-=2;
                cnt-=2;
                continue;
            }
            if(used[2]-cover[2]>0 && used[0]-cover[0]>=8){
                cover[2]++;
                cover[1]++;
                cover[0]+=6;
                n[0]-=2;
                used[0]-=2;
                --cnt;
                continue;
            }
        }
        cout<<cnt<<endl;
    }
}