zoukankan      html  css  js  c++  java
  • jzoj5341 捕老鼠

    Description
    为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠。于是,猫被农夫约派去捕老鼠。 猫虽然擅长捕老鼠,但是老鼠们太健美了,身手敏捷,于是猫想到了一个绝妙的办法:它决定点燃纯艾条,用烟熏老鼠。 农夫约的农庄里有N 个仓库,排成了一排,编号为1~N。

    假设猫在第i 个仓库点燃艾条,烟雾就会充满该仓库,并向左右扩散Ai的距离,接着所有|i-j|<=Ai 的仓库j 的老鼠被消灭。 猫是一只爱护空气环境的好猫,它希望知道最少需要多少支艾条,才可以消灭所有老鼠。

    Input
    第一行:一个正整数,代表N。
    第二行:N 个非负整数,第i 个数代表Ai。

    Output
    第一行:一个整数,代表答案。

    Sample Input
    10
    2 0 1 1 0 3 1 0 2 0

    Sample Output
    3

    Hint
    Data Constraint

    20%的数据:N <= 20
    60%的数据:N <= 10^3
    100%的数据:N <= 5*10^5,Ai <= N

    sb区间覆盖QwQ

    cjoj上63ms
    好像是最快的了orz

    // It is made by XZZ
    // Fei Fan Ya Xi Lie~~~
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
    	rg int x=0,f=1;rg char ch=getchar();
    	while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
    	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    	return x*f;
    }
    const int maxn=5e5+1;
    int a[maxn],mr[maxn];
    il vd checkmx(int&a,int b){if(b>a)a=b;}
    int main(){
    // 	freopen("2605.in","r",stdin);
    // 	freopen("2605.out","w",stdout);
    	int n=gi();
    	for(rg int i=1;i<=n;++i)a[i]=gi();
    	for(rg int i=1;i<=n;++i)checkmx(mr[max(1,i-a[i])],i+a[i]);
    	for(rg int i=2;i<=n;++i)checkmx(mr[i],mr[i-1]);
    	int r=0,ans=0;
    	while(r<n)++ans,r=mr[r+1];
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    网上购物记录(2011淘宝大甩卖)
    心理学上最诡异的23张图!!
    三字念什么
    哥德尔不完备定理
    又要新的开始了(续)
    第一次接触计算机语言的经历
    哥德尔不完备性定理——从数学危机到哲学危机
    google (精简版)
    贴吧回复
    在轻松的环境中工作
  • 原文地址:https://www.cnblogs.com/xzz_233/p/jzoj5341.html
Copyright © 2011-2022 走看看