前提
下記のプログラムのmidの変数を途中経過として出力したいのですが、うまくいきません。
最初のmidの直後にprintfをするとmid=mid=mid=mid=mid=(数値)になってしまいました...
実現したいこと
ここに実現したいことを箇条書きで書いてください。
・midの途中経過が見たい
該当のソースコード
C++
1#include <iostream> 2#include <algorithm> 3#include <vector> 4using namespace std; 5 6int main() { 7 // 入力 8 int N; 9 cin >> N; 10 vector<long long> H(N), S(N); 11 for (int i = 0; i < N; i++) cin >> H[i] >> S[i]; 12 13 // 二分探索の上限値を求める 14 long long M = 0; 15 for (int i = 0; i < N; ++i) M = max(M, H[i] + S[i] * N); 16 17 printf("M=",M); 18 19 // 二分探索 20 long long left = 0, right = M; 21 while (right - left > 1) { 22 long long mid = (left + right) / 2; 23 24 // 判定する 25 bool ok = true; 26 vector<long long> t(N, 0); // 各風船を割るまでの制限時間 27 for (int i = 0; i < N; ++i) { 28 // そもそも mid が初期高度より低かったら false 29 if (mid < H[i]) ok = false; 30 else t[i] = (mid - H[i]) / S[i]; 31 } 32 // 時間制限がさし迫っている順にソート する 33 sort(t.begin(), t.end()); 34 for (int i = 0; i < N; ++i) { 35 // 時間切れ発生の場合は false 36 if (t[i] < i) ok = false; 37 } 38 if (ok) right = mid; 39 else left = mid; 40 41 } 42 43 cout << right << endl; 44}
試したこと
・最初のmidの直後に出力文
・mid直後のfor文の後に出力文。
補足情報(FW/ツールのバージョンなど)
二分探索のプログラムです。