B. Heaters Div3

链接

[http://codeforces.com/contest/1066/problem/B]

分析

具体看代码,贪就完事了

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,r,k,i,pos;
	int a[1010];
	//freopen("in.txt","r",stdin);
	while(cin>>n>>r){
		memset(a,0,sizeof(a));
		for(i=1;i<=n;i++)
		{
			cin>>k;
			if(k==1)//可以往两边发散的点 
			{
				for(pos=max(1,i-r+1); pos<=min(n,r+i-1); pos++)//贪心模拟 
				{
					a[pos]=max(a[pos],i);//所能覆盖的区域,每个位置尽可能往后贪即可 
				}
			}
		}
		int ans=0;
		i=1;
		while(i<=n){
			if(a[i]==0) {
				ans=-1;
				break;
			}
			ans++;
			i=a[i]+r;//因为i这个位置最右边的覆盖点,一定可以把自己两边的区域覆盖 
		}
		cout<<ans<<endl;
	}
	return 0;
}
posted @ 2018-10-13 18:54  ChunhaoMo  阅读(143)  评论(0编辑  收藏  举报