トップページ
>
ヒッキー
>
2017年03月20日
>
fa3SQn4u0
書き込み順位&時間帯一覧
65 位
/345 ID中
時間
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Total
書き込み数
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
4
使用した名前一覧
書き込んだスレッド一覧
(-_-)さん
ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
書き込みレス一覧
ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
157 :
(-_-)さん
[sage]:2017/03/20(月) 01:21:47.88 ID:fa3SQn4u0
http://codeforces.com/blog/entry/50996
Cが微妙に良くわからん
二分探索で
if (mid == x) {
break;
} else if (mid > x) {
right = mid - 1;
} else {
left = mid + 1;
}
じゃダメな時があるけどどういう時なん?
ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
177 :
(-_-)さん
[sage]:2017/03/20(月) 15:09:45.18 ID:fa3SQn4u0
>>165
q = n - k*(k+1)/2だとして、 (k>=0, k=0のときq>m)
q <= m を満たすkの最小値を求めたいから
if (q > m) {
left = mid + 1;
} else {
right = mid;
}
になるのかな
逆に最大値を求めたいとなったら
if (!条件) {
right = mid - 1;
} else {
left = mid;
}
になる?
ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
183 :
(-_-)さん
[sage]:2017/03/20(月) 20:51:14.54 ID:fa3SQn4u0
>>182
なるほどありがとう!
ヒッキーのプログラミングするスレ 9 (旧 プログラミング雑談 in HIKIKO) [無断転載禁止]©2ch.net
186 :
(-_-)さん
[sage]:2017/03/20(月) 21:45:44.34 ID:fa3SQn4u0
>>185
>>182が正解だと思う
符号が違うとmid = left + (right - left) / 2 のとき切り下げが起こるから
if(q > m)でleft = mid+1が必要になる
逆に切り上げにしたらif(q < m)でright = mid - 1にするんだと思う
※このページは、
『2ちゃんねる』
の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合は
メール
をしてください。対応します。