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