B. Heaters ( Codeforces Round #515 (Div. 3) )

题解:对于每一个点 i 来讲,从 j = i + r - 1 开始往前找,若是找到一个 a [ j ] 是 1 ,那么就把它选上,可是咱们须要判断交界处,也就是若是前面选的那个能够让这个点变温暖,就不用再选多余的了。这样就记录一下前一个 last ,要知足 j > last。找到以后,就更新 i 的值,在 i + k 之间的均可以由选的这个点来温暖。ios

#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;
}
相关文章
相关标签/搜索