原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521
思路:每一次猜测后检查剩下的区域是否可以还可以放下k个战舰,而每一次猜测后剩余的面积是可以算出来的
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2 * 1e5 + 5;
int n, k, a, p, m;
bool flag[MAXN];
int main() {
scanf("%d %d %d", &n, &k, &a);
scanf("%d", &m);
int sum = (n + 1) / (a + 1);
for (int i = 1; i <= m; i++) {
scanf("%d", &p);
flag[p] = true;
int left = p - 1, right = p + 1;
for (; left >= 1 && !flag[left]; left--);
for (; right <= n && !flag[right]; right++);
sum -= (right - left) / (a + 1) - (p - left) / (a + 1) - (right - p) / (a + 1);
if (sum < k) {
printf("%d\n", i);
return 0;
}
}
printf("-1\n");
return 0;
}