装箱问题
究极特判,直接看代码
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int s1, s2, s3, s4, s5, s6;
int main() {
while(scanf("%d%d%d%d%d%d", &s1, &s2, &s3, &s4, &s5, &s6), !(s1 == 0 && s2 == 0 && s3 == 0 && s4 == 0 && s5 == 0 && s6 == 0)) {
int ans = 0;
ans += s6;
s6 = 0;
//printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);
ans += s5;
if (11 * s5 < s1)
s1 -= 11 * s5;
else
s1 = 0;
s5 = 0;
//printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);
ans += s4;
if (5 * s4 < s2)
s2 -= 5 * s4;
else {
int last = 5 * s4 - s2;
s2 = 0;
if (last * 4 < s1)
s1 -= last * 4;
else
s1 = 0;
}
s4 = 0;
//printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);
ans += s3 / 4 + (s3 % 4 != 0);
if (s3 % 4 != 0) {
int last = 4 - s3 % 4, use;
if (last == 3) {
if (5 < s2) {
s2 -= 5;
use = 5;
}
else {
use = s2;
s2 = 0;
}
}
else if (last == 2) {
if (3 < s2) {
s2 -= 3;
use = 3;
}
else {
use = s2;
s2 = 0;
}
}
else {
if (1 < s2) {
s2 -= 1;
use = 1;
}
else {
use = s2;
s2 = 0;
}
}
last = last * 9 - use * 4;
if (last < s1)
s1 -= last;
else
s1 = 0;
}
s3 = 0;
//printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);
ans += s2 / 9 + (s2 % 9 != 0);
if (s2 % 9 != 0) {
int last = (9 - s2 % 9) * 4;
if (last < s1)
s1 -= last;
else
s1 = 0;
}
s2 = 0;
//printf("box now 1:%d 2:%d 3:%d 4:%d 5:%d 6:%d\n", s1, s2, s3, s4, s5, s6);
ans += s1 / 36 + (s1 % 36 != 0);
printf("%d\n", ans);
}
return 0;
}