zoukankan      html  css  js  c++  java
  • bzoj 2013: A huge tower 数学

    题目:

    (N(2leq Nleq 620000))块砖,要搭一个(N)层的塔,要求:如果砖(A)在砖(B)上面,那么(A)不能比(B)的长度(+D)要长。问有几种方法,输出 答案(mod 10^9+9)的值

    题解:

    考虑从大到小插入砖块.
    可以发现只要满足插入时该砖块与下面的砖块满足条件那么与上面的砖块也满足条件.
    也就是说我们只用在乎下砖块是哪个.
    所以枚举插入到哪个砖块上面就好了.

    可以排序后直接搞.

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    inline void read(int &x){
        x=0;char ch;bool flag = false;
        while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
        while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
    }
    #define rg register int
    #define rep(i,a,b) for(rg i=(a);i<=(b);++i)
    #define per(i,a,b) for(rg i=(a);i>=(b);--i)
    const int maxn = 620010;
    const int mod = 1e9+9;
    int a[maxn];
    int main(){
        int n,D;read(n);read(D);
        rep(i,1,n) read(a[i]);
        sort(a+1,a+n+1);
        int ans = 1,cnt = 1;
        rep(i,1,n){
    		while(cnt < i && a[cnt] + D < a[i]) ++ cnt;
    		ans = 1LL*ans*(i - cnt + 1) % mod;
        }printf("%d
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    Servlet Filter过滤器执行顺序
    eclipse乱码问题
    如何查看servlet&jsp版本?
    Unity的shader学习2
    Unity的shader学习1
    后缀数组专题与代码模板
    哈希表/散列表 指针版模版
    图的连通性专题及模板
    一般图最大匹配--带花树
    7-15至7-17训练赛回顾
  • 原文地址:https://www.cnblogs.com/Skyminer/p/7010619.html
Copyright © 2011-2022 走看看