o711. 1. 裝飲料
unknown
c_cpp
a year ago
2.2 kB
53
Indexable
#include <iostream>
using namespace std;
int get_height(int w, int water) {
return water / w / w;
}
int get_water(int w, int height) {
return w * w * height;
}
/*
@history_height: 累積高度
@accumulate_height: 該杯水累積高度
@valid_f2: 倒得進 長方體 2 的高度,目的是正確的在長方體2更新 hidtory
因為沒辦法直接用 history_height += accumulate_height;
*/
int main() {
int n;
cin>> n;
int w1, w2, h1, h2;
cin>> w1>> w2>> h1>> h2;
int history_height=0, max_height=0;
while(n--) {
int water;
cin>> water;
int accumulate_height=0;
int valid_f1=0;
if(history_height < h1) {
int f1 = get_height(w1, water);
if(history_height + f1 > h1) {
valid_f1 = h1 - history_height;
water -= get_water(w1, valid_f1);
accumulate_height += valid_f1;
}
else {
valid_f1 = f1;
water -= get_water(w1, valid_f1); // 0
accumulate_height += valid_f1;
}
// update history
history_height += valid_f1;
//printf("1. w:%4d, h:%4d, wat:%5d, hist:%4d\n", w1, valid_f1, water, history_height);
}
int valid_f2=0;
if(history_height < h1+h2 && water > 0) {
int f2 = get_height(w2, water);
if(history_height + f2 > h1+h2) {
valid_f2 = h1+h2 - history_height; // h2 -> h1+h2
water -= get_water(w2, valid_f2);
accumulate_height += valid_f2;
}
else {
valid_f2 = f2;
water -= get_water(w2, valid_f2);
accumulate_height += valid_f2;
}
history_height += valid_f2;
//printf("2. w:%4d, h:%4d, wat:%5d, hist:%4d\n", w2, valid_f2, water, history_height);
}
//printf("acc:%d, (%d, %d)\n", accumulate_height, valid_f1, valid_f2);
max_height = max(max_height, accumulate_height);
}
cout<< max_height;
}
Editor is loading...
Leave a Comment