当前位置: 代码迷 >> 综合 >> B. Heaters
  详细解决方案

B. Heaters

热度:72   发布时间:2024-01-28 02:50:19.0

题目

题意:一条直线上有n个地方,每个火的范围是r为半径,判断最少需要几个火

思路:不断更新左边界,并判断是否超过有边界

AC代码:

package 练习;
import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
public class Main{static int a[];public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int r=sc.nextInt();a=new int [1005];for(int i=1;i<=n;i++) {a[i]=sc.nextInt();}int now=-r+1,i=1,j,ans=0;for(;i<=n;) {//System.out.println(now);for(j=i;j<Math.min(n+1,i+r);j++) {//更新左边界if(a[j]==1)now=j;}if(now+j>i) {  //判断,更新覆盖的范围ans++;i=now+r;}else {    //无法完全覆盖,退出ans=-1ans-=1;break;}//System.out.println(now+" 0000");for(j=now+1;j<Math.min(n+1,now+r);j++) {if(a[j]==1)now=j;}}System.out.println(ans);}
}