CF-1066B-Heaters
Posted angel-demon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF-1066B-Heaters相关的知识,希望对你有一定的参考价值。
这题就是从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的主要内容,如果未能解决你的问题,请参考以下文章