CodeForces 371C Hamburgers
Description
做一个汉堡需要B(Bread) S(Sausage) C(Cheese)中的一种或多种,给出一个字符串代表配方,给出已有材料,相应材料商店售价,现有资金,问最多能做多少个汉堡?
二分
二分实质:对于暴力枚举的优化
为什么会想到用二分?
- 若想枚举出所有情况:太多且易遗漏
- 已知答案必在某个固定区间里(此时遍历耗时则用二分优化)
明确目的:
求
- 最大值?
- 最小值?
- 最大化最小值?
- 最小化最大值?
三要素:
- 下界:为了方便,可适当向下调整(求最大值时下界必须实际)
- 上界:为了方便,可适当向上调整(求最大值时,上界是理想值(白日梦值))
- bool judge(ll ans):检查资金是否足够
Code
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
改进:调整上下界
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
如上,之前在找上下界时,执着于缩小范围,导致
忽视了分母为0的情况而RE
遗漏了两种材料都不需要的情况而WA
后来干脆扩展界线,代码简单还AC了