Finished part 2 of day 7, still binary search with a slightly harder cost function
This commit is contained in:
@@ -15,6 +15,17 @@ int fuel_cost(int n){
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int updated_fuel_cost(int n){
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
for(auto &crab : crab_pos){
|
||||||
|
int dif = abs(crab - n);
|
||||||
|
result += dif * (dif + 1) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
ios::sync_with_stdio(0);
|
ios::sync_with_stdio(0);
|
||||||
cin.tie(0);
|
cin.tie(0);
|
||||||
@@ -38,6 +49,27 @@ int main(){
|
|||||||
int target_coord = min(m2, m1);
|
int target_coord = min(m2, m1);
|
||||||
cout << fuel_cost(target_coord) << endl;
|
cout << fuel_cost(target_coord) << endl;
|
||||||
|
|
||||||
|
upper = crab_pos.back();
|
||||||
|
lower = crab_pos.front();
|
||||||
|
m1 = (upper + lower) / 2;
|
||||||
|
m2 = (upper + lower) / 2 + 1;
|
||||||
|
|
||||||
|
while(upper - lower > 1){
|
||||||
|
if(updated_fuel_cost(m1) < updated_fuel_cost(m2)){
|
||||||
|
upper = m1;
|
||||||
|
} else{
|
||||||
|
lower = m2;
|
||||||
|
}
|
||||||
|
|
||||||
|
m1 = (upper + lower) / 2;
|
||||||
|
m2 = (upper + lower) / 2 + 1;
|
||||||
|
|
||||||
|
// cout << m1 << ", fuel: " << updated_fuel_cost(m1) << " " << m2 << ", fuel: " << updated_fuel_cost(m2) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
target_coord = min(m1, m2);
|
||||||
|
cout << updated_fuel_cost(target_coord) << endl;
|
||||||
|
|
||||||
cout << flush;
|
cout << flush;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user