範例程式碼 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;
}
}