答えが実数だし、2分探索ってことに気付くのは難しくなかった。
class CutSticks { public: double maxKth(vector <int> v, int C, int K) { double s = 0; double b = *max_element( ALL(v) ); for(int loop = 1000; loop--; ){ double c = (s + b) / 2.0; int cnt = 0; lli sum = 0; for(int i=0; i<v.size(); ++i){ sum += (double)v[i] / c; cnt += c <= (double)v[i]; } if( K <= sum && K - C <= cnt )s = c; else b = c; } return s; } };
0 件のコメント :
コメントを投稿