zoukankan      html  css  js  c++  java
  • Bzoj 2013 [Ceoi2010] A huge tower 题解

    2013: [Ceoi2010]A huge tower

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 471  Solved: 321
    [Submit][Status][Discuss]

    Description

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

    Input

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

    Output

    方案数。输出要mod1000000009

    Sample Input

    4 1
    1 2 3 100

    Sample Output

    4
      一道liu_runda都没看出来的题……
      又是一道想得到十分钟AC,想不到一整天也打不出来的题……
      对于这道题,我们大可“目光短浅”一点,他说什么我们就想什么。既然他唯一的限制是上下两块砖的限制,我们就只关注上下两块砖的关系,很明显,大的砖在下面一定是合法的,我们就去按照题目给的要求,看谁能在他下面,我们先假定这块砖是当前最大的,这样,我们就可以让任一砖在他上面都合法,然后,可以注意到只要这块砖可以放到谁的上面,我们就尽管去放好了,反正他上面的砖比他小。这样,我们只要把砖排一个序,然后去找有几块砖可以放到当前砖下面,乘起来就好了。
     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <queue>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <map>
     9 #include <vector>
    10 #define N 620005
    11 using namespace std;
    12 int n,a[N],p=1000000009,d;
    13 int main()
    14 {
    15     scanf("%d%d",&n,&d);
    16     for(int i=1;i<=n;i++)
    17         scanf("%d",&a[i]);
    18     sort(a+1,a+n+1);
    19     long long ans=1,zz=1;
    20     for(int i=2;i<=n;i++)
    21     {
    22         while(a[zz]+d<a[i])zz++;
    23         ans*=(i-zz+1);
    24         ans%=p;
    25     }
    26     printf("%lld
    ",ans);
    27     return 0;
    28 }
    View Code

      Ps:据说4352是双倍经验。

  • 相关阅读:
    MySQL之数据库结构优化
    MySQL之索引
    Spring之单元测试
    Spring之IOC容器加载初始化的方式
    LeetCode之Sort List
    [译]Java 垃圾回收的监控和分析
    [译]Java垃圾回收器的类型
    [译]Java垃圾回收是如何工作的
    [译]Java 垃圾回收介绍
    JSP之项目路径问题(${pageContext.request.contextPath},<%=request.getContextPath()%>以及绝对路径获取)
  • 原文地址:https://www.cnblogs.com/liutianrui/p/7695079.html
Copyright © 2011-2022 走看看