题意:一条直线上有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=-1
ans-=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);
}
}