WUPC2nd D - 5キューブ

問題

日本語なので本文参照(http://wupc2nd.contest.atcoder.jp/tasks/wupc_04

制約条件

Ni≦10^9

方針

貪欲につめる。
5x5x5, 4x4x4のキューブはひとつしか入らない。
残りの隙間に1x1x1のキューブをできるだけ入れる。


3x3x3のキューブには、2x2x2のキューブが7個まで一緒に入るので、できるだけ一緒に入れる。
残りの隙間に1x1x1のキューブを入れる。


2x2x2のキューブは8個ずつセットにして入れる。
残りの隙間には1x1x1のキューブを入れる。


1x1x1のキューブは125個ずつセットにして入れる。

ソースコード

int cnt[6];
 
int main(){
	rep(i, 5) cin >> cnt[i + 1];
	ll ans = cnt[5];
	
	//4
	int k = cnt[4];
	ans += k;
	cnt[1] = max(0ll, cnt[1] - k * (125 - 64ll));
	
	//3
	k = cnt[3];
	ans += k;
	int l = min((ll)cnt[2], k * 7ll);
	cnt[2] -= l;
	cnt[1] = max(0ll, cnt[1] - (125ll * k - 27ll * k - 8ll * l));
	
	//2
	k = cnt[2] / 8;
	ans += k;
	cnt[1] = max(0ll, cnt[1] - k * (125ll - 64));
	cnt[2] %= 8;
	if(cnt[2]){
		ans++;
		cnt[1] = max(0ll, cnt[1] - (125 - 8ll * cnt[2]));
	}
	ans += (cnt[1] + 124) / 125;
	
	cout << ans << endl;
	
	return 0;
}