• 洛谷 P1400 塔


    题目描述

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

    输入输出格式

    输入格式:

     

    第一行: N,D 第二行: N个数,表示每块砖的长度。

     

    输出格式:

     

    方案数,输出要mod 1000000009

     

    输入输出样例

    输入样例#1: 复制
    4 1
    1 2 3 100
    
    输出样例#1: 复制
    4
    思路:数学
    首先排序,这是大家能想到的第一思路。
    其次计算 num[i]--num[i]+d中数的个数,ans每次乘这个数,乘法原理解决。
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define mod 1000000009
    using namespace std;
    int n,d;
    int num[600010];
    int l,r,mid,ll,rr;
    long long ans=1;
    bool judge(int i){
        if(num[mid]<=num[i])    return true;
        else return false;
    }
    bool juddge(int i){
        if(num[mid]<=num[i]+d)    return true;
        else return false;
    }
    int main(){
        scanf("%d%d",&n,&d);
        for(int i=1;i<=n;i++)
            scanf("%d",&num[i]);
        sort(num+1,num+1+n);
        for(int i=1;i<=n;i++){
            l=1;r=n;
            while(l<=r){
                mid=(l+r)/2;
                if(judge(i))    l=mid+1;
                else r=mid-1;
            }
            ll=1;rr=n;
            while(ll<=rr){
                mid=(ll+rr)/2;
                if(juddge(i))    ll=mid+1;
                else rr=mid-1;
            }
            ans=ans*(ll-l+1)%mod;
        }
        cout<<ans;
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    爬虫入门
    读写文件操作
    列表的操作
    课后习题小练
    Python切片
    逗号的麻烦
    字符串学与练
    Turtle的学习
    FTL(FreeMarker)基础
    java反射机制基础
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7840783.html
Copyright © 2020-2023  润新知