1. 程式人生 > >CF-1066B-Heaters

CF-1066B-Heaters

typedef 最大 esp space 找到 c++ amp ace class

這題就是從1到n點進行遍歷,對未加熱的點找到最遠的能加熱到這個點的點,還是看代碼講吧

#include"bits/stdc++.h"
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long LL;
int a[1005],ans;
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    for(int i=1;i<=n;ans++){
        
//讓j等於能加熱到i點的最遠值,能加熱到i點的範圍是[j-m+1,j+m-1] //但是如果j+m-1大於n,那麽(n,j+m-1]這段要舍棄;如果j-m+1小於1,那麽[j-m+1,1)這段也一樣要舍棄; int j=i+m-1;if(j>n)j=n; while(j&&j>j-m){ //在能加熱到i點的範圍內找到有加熱器的最大點; if(a[j]==1)break; j--; } //如果在這個範圍內沒有找到1,那麽i點必然加熱不到,可以直接輸出-1並結束程序了
if(!j||j<=j-m){ puts("-1"); return 0; } //否則讓i增加到j加熱不到的最小值也就是j+m; i=j+m; } printf("%d",ans); return 0; }

CF-1066B-Heaters