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


    题解:对于每个点 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
    ");return 0;}
                else {
                    last = k;
                    num ++;
                    i = r + k;
                }
            }
            printf("%d
    ",num);
        }
        return 0;
    }
  • 相关阅读:
    jsp第六周作业
    jsp第四周作业
    jsp第一周周作业
    第一次软件测试课堂练习
    4.11jsp
    第六周作业
    第三周jsp作业
    3.10 jsp作业
    3.4软件测试
    JSP第六周作业
  • 原文地址:https://www.cnblogs.com/lcchy/p/10139390.html
Copyright © 2020-2023  润新知