zoukankan      html  css  js  c++  java
  • hdu 6333

    Problem Description
    There are n apples on a tree, numbered from 1 to n.
    Count the number of ways to pick at most m apples.
     
    Input
    The first line of the input contains an integer T (1T105) denoting the number of test cases.
    Each test case consists of one line with two integers n,m (1mn105).
     
    Output
    For each test case, print an integer representing the number of ways modulo 109+7.
     
    Sample Input
    2 5 2 1000 500
     
    Sample Output
    16 924129523
     
    Source
     
    Recommend
    chendu   |   We have carefully selected several similar problems for you:  6343 6342 6341 6340 6339 
     
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <vector>
     5 #include <cmath>
     6 #include <algorithm>
     7 using namespace std;
     8 #define N 100005//一开始是10005,超时
     9 #define mod 1000000007
    10 #define gep(i,a,b) for(int i=a;i<=b;i++)
    11 #define mem(a,b) memset(a,b,sizeof(a))
    12 #define ll  long long 
    13 ll fac[N]={1,1},inv[N]={1,1},f[N]={1,1};
    14 ll c(ll a,ll b)
    15 {
    16    if(b>a)  return 0;
    17    return fac[a]*inv[b]%mod*inv[a-b]%mod;
    18 }
    19 void init()
    20 {
    21     gep(i,2,N-1){
    22         fac[i]=fac[i-1]*i%mod;
    23         f[i]=(mod-mod/i)*f[mod%i]%mod;
    24         inv[i]=inv[i-1]*f[i]%mod;
    25     }
    26 }
    27 struct Ma{
    28     ll n,m;
    29     int id;
    30     bool operator <(const Ma&a)const{
    31         return n<a.n;//排序
    32     }
    33 }ma[N];
    34 vector<Ma>ve[N];
    35 ll ans[N];
    36 int t;
    37 int main()
    38 {
    39   init();  
    40   scanf("%d",&t);
    41   ll mx=sqrt(100000);
    42   gep(i,1,t){
    43      scanf("%lld%lld",&ma[i].n,&ma[i].m);
    44      ll x=ma[i].m/mx;
    45       ma[i].id=i;
    46      ve[x].push_back(ma[i]);//分块
    47   } 
    48   gep(i,0,mx){
    49       if(!ve[i].size())  continue;
    50       sort(ve[i].begin(),ve[i].end());//排序
    51       int k=ve[i].size();
    52       ll val=0,ik=-1,mn=ve[i][0].n;//一次处理每组数据
    53       /*
    54       s(n,m):c(n,0)+c(n,1)+……c(n,m)
    55       s(n,m)=2*s(n-1,m)-c(n-1,m)
    56       */
    57       gep(j,0,k-1){
    58           while(mn<ve[i][j].n) val=(2ll*val+mod-c(mn++,ik))%mod;//+mod
    59           while(ik<ve[i][j].m) val=(val+c(mn,++ik))%mod;//,++ik,不是ik++,可以不加mod
    60           while(ik>ve[i][j].m) val=(val+mod-c(mn,ik--))%mod;//+mod
    61           ans[ve[i][j].id]=val;
    62       }  
    63   }
    64   gep(i,1,t){
    65        printf("%lld
    ",ans[i]);
    66       }      
    67   return 0;
    68 }
  • 相关阅读:
    均匀分布的随机数
    第三十四章 软件工艺的话题
    第三十三章 个人性格
    MySQL常用命令(三)---最值的搜索
    lnmp环境运行laravel open_basedir restriction in effect 问题
    Host 'XXX' is not allowed to connect to this MySQL server解决方案
    CentOS 7中设置PHP7的Log文件日志
    如何查看Laravel版本号的三种方法
    CentOS 7下安装Composer + Laravel
    LNMP一键安装包
  • 原文地址:https://www.cnblogs.com/tingtin/p/9410895.html
Copyright © 2011-2022 走看看