题意: 就是补兵。。
先用二分查找得到两端。然后压缩掉不符合的端点。。
注意,估计最大时间的时候,很可能会爆longlong(猜的),所以要用 (H-P)/rate, rate是每秒掉血。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
using namespace std;
#define REP(i,s,t) for(int (i)=(s);(i)<=(t);++(i))
#define UREP(i,s,t) for(int (i)=(s);(i)>=(t);--(i))
#define INF 0x7FFFFFFF
const int maxn = 100000;
int max_harm[1005];
int accum_harm[1005];
int A, T, P, H;
int max_interval, sum;
bool check(int x) {
int m = 0;
for (int i=1;i<=max_interval;++i) {
if (accum_harm[i]) {
m += x/i*accum_harm[i];
}
}
if (m + P>= H) return true;
return false;
}
bool check2(int x) {
int m = 0;
for (int i=1;i<=max_interval