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

Posted lr599909928

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #515 (Div. 3) B. Heaters (贪心)相关的知识,希望对你有一定的参考价值。

技术图片

  • 题意:有(n)个桩子,(1)表示该位置有一个火炉,可以使两边距离为(r)的范围照亮,问最少使用多少炉子使得所有范围都被照亮.

  • 题解:贪心,首先我们从(r)位置开始向左找,如果找到了就记录这个位置,然后答案+1,然后再从(2*r-1)这个位置开始向左找第一个没有标记的火炉,如果没有找到就直接输出(-1)结束,否则重复寻找的过程.

  • 代码:

    int n,r;
    int a[N];
    bool st[N];
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
      	cin>>n>>r;
      	 for(int i=1;i<=n;++i){
      	 	cin>>a[i];
      	 }
    
      	 int pos=r;
      	 int cnt=0;
      	 while(true){
      	 	if(a[pos]){
      	 		cnt++;
      	 		st[pos]=true;
      	 		if(pos+r-1>=n) break;
      	 		else{
      	 			pos=pos+2*r-1;
      	 			continue;
      	 		}
      	 	}
      	 	while(a[pos]==0 && pos>=1 && !st[pos]) pos--;
      	 	if(st[pos] || pos==0){
      	 		cout<<-1<<endl;
      	 		return 0;
      	 	}
      	 	else{
      	 		cnt++;
      	 		st[pos]=true;
      	 		if(pos+r-1>=n) break;
      	 		pos=pos+2*r-1;
      	 	}
       	 }
       	 cout<<cnt<<endl;
        return 0;
    }
    

以上是关于Codeforces Round #515 (Div. 3) B. Heaters (贪心)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #292 (Div. 2) C. Drazil and Factorial 515C

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

Codeforces Round #515 (Div. 3) 解题报告(A~E)

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例