B. Heaters ( Codeforces Round #515 (Div. 3) )
阿新 • • 發佈:2018-12-19
題解:對於每個點 i 來說,從 j = i + r - 1 開始往前找,如果找到一個 a [ j ] 是 1 ,那麼就把它選上,但是我們需要判斷交界處,也就是如果前面選的那個可以讓這個點變溫暖,就不用再選多餘的了。這樣就記錄一下前一個 last ,要滿足 j > last。找到之後,就更新 i 的值,在 i + k 之間的都可以由選的這個點來溫暖。
#include <iostream> #include <bits/stdc++.h> using namespace std; int a[2005]; int main() { int n,r; while(scanf("%d%d",&n,&r) != EOF) { memset(a,0,sizeof(a)); for(int i = 1; i <= n; i ++) { scanf("%d",&a[i]); } int num = 0; int last = 0,j,k; for(int i = 1; i <= n;) { j = i + r - 1; k = 0; while(j > last) { if(a[j]) { k = j; break; } else j --; } if(k == 0) {printf("-1\n");return 0;} else { last = k; num ++; i = r + k; } } printf("%d\n",num); } return 0; }