解题思路
每天能打就打,跳过能打的日子不会更优。第 D 天功率为 w+⌊(D−1)/c⌋,硬度为 h((D−1)modc)+1。q 最大为 1000000000000,不能按天模拟,对天数二分。
- 二分最少天数 d。判定「d 天内能否打掉 q 块」。
- 把 d 写成 d=full⋅c+rest。前 full 个完整周期的功率依次是 w,w+1,…,w+full−1;剩下 rest 天功率为 w+full,对应 h1,…,hrest。
- 对每个位置 i,它在完整周期里能打中的次数:若 hi≤w,每个周期都能打,贡献 full 次;否则从功率升到 hi 起才行,贡献 max(0,full−(hi−w)) 次。
- 相同硬度合并计数,一次乘上出现次数。再扫剩下的 rest 天,功率够就再加
1。总数 ≥q 则可行。
- c=1 时公式仍然成立。累加时若已经 ≥q 就提前返回,避免
long 溢出。功率会一直上涨,一定能打完。