思路:由於一個candle只能覆蓋t,所以對某一時刻w[i],最早的candle點亮時間不超過w[i] - t。否則w[i]時刻該candle已經熄滅。
所以對每個w[i],統計w[i] - t ~ w[i] - 1之間有多少根蠟燭被點亮即可。若已有r個candle,不做任何處理。否則,由近及遠點亮需要的candle。
代碼如下:
#include <cstdio>
using namespace std;
#define N 605
int w[N];
bool candle[N];
int main(){
int n, t, r, x;
scanf("%d %d %d", &n, &t, &r);
for(int i = 1; i <= n; ++i)
scanf("%d", &x), w[i] = x + 300;
if(t < r)
printf("-1\n");
else{
int ans = 0;
bool ok = true;
for(int i = 1; i <= n && ok; ++i){
int cnt = 0;
for(int j = w[i] - 1; j >= w[i] - t; --j){
if(candle[j])
cnt ++;
}
if(cnt < r){
for(int j = w[i] - 1; j >= w[i] - t && cnt < r; --j){
if(!candle[j])
cnt ++, ans ++, candle[j] = true;
}
if(cnt < r)
ok = false;
}
}
if(ok)
printf("%d\n", ans);
else
printf("-1\n");
}
return 0;
}