Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>#include <algorithm>using namespace std;const int maxn = 100010;int radius[maxn], dp[maxn];int main() {//freopen("input.in", "r", stdin);int n, m ,h, r;scanf("%d%d%d%d", &n, &m, &h, &r);for (int i = 0; i < n; ++i)scanf("%d", &radius[i]);sort(radius, radius + n);dp[0] = radius[0] <= r;int ans = 0;for (int i = 1; i < n; ++i) {if (radius[i] - radius[i-1] > m) {dp[i] = radius[i] <= r;}elsedp[i] = (dp[i-1] + 1) * (radius[i] <= dp[i-1] + r);if (dp[i] <= 1)ans += dp[i-1];if (!dp[i] || ans >= h)break;//printf("%d\n", dp[i]);