• BZOJ2982: combination Lucas模板


    2982: combination

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 734  Solved: 437
    [Submit][Status][Discuss]

    Description

    LMZn个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样。那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值。(1<=m<=n<=200,000,000)

    Input

      第一行一个整数t,表示有t组数据。(t<=200)
      接下来t行每行两个整数n, m,如题意。

    Output

    T行,每行一个数,为C(n, m) mod 10007的答案。

    Sample Input

    4
    5 1
    5 2
    7 3
    4 2

    Sample Output

    5
    10
    35
    6

    HINT

    Source

    lucas模板题

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <queue>
     7 #include <vector>
     8 #include <map>
     9 #include <string> 
    10 #include <cmath> 
    11 #include <sstream>
    12 #define min(a, b) ((a) < (b) ? (a) : (b))
    13 #define max(a, b) ((a) > (b) ? (a) : (b))
    14 #define abs(a) ((a) < 0 ? (-1 * (a)) : (a))
    15 template<class T>
    16 inline void swap(T &a, T &b)
    17 {
    18     T tmp = a;a = b;b = tmp;
    19 }
    20 inline void read(long long &x)
    21 {
    22     x = 0;char ch = getchar(), c = ch;
    23     while(ch < '0' || ch > '9') c = ch, ch = getchar();
    24     while(ch <= '9' && ch >= '0') x = x * 10 + ch - '0', ch = getchar();
    25     if(c == '-') x = -x;
    26 }
    27 const long long INF = 0x3f3f3f3f;
    28 const long long MAXN = 200000000;
    29 const long long MOD = 10007;
    30 
    31 long long f[MOD + 1000], t, n, m;
    32 long long pow(long long a, long long b)
    33 {
    34     long long r = 1, base = a % MOD;
    35     for(;b;b >>= 1)
    36     {
    37         if(b & 1) r *= base, r %= MOD;
    38         base *= base, base %= MOD;
    39     }
    40     return r;
    41 }
    42 long long ni(long long x)
    43 {
    44     return pow(x, MOD - 2);
    45 }
    46 long long C(long long n, long long m)
    47 {
    48     if(n < m) return 0;
    49     int tmp = f[n] * ni(f[m]) % MOD , tmp2 = tmp * ni(f[n - m]) % MOD;
    50     return tmp2;
    51 }
    52 long long lucas(long long n, long long m)
    53 {
    54     if(!m) return 1;
    55     else return C(n % MOD, m % MOD) * lucas(n / MOD, m / MOD) % MOD;
    56 }
    57 
    58 int main()
    59 {
    60     read(t);f[0] = 1;
    61     for(long long i = 1;i <= MOD;++ i)
    62         f[i] = f[i - 1] * i % MOD;
    63     for(long long i = 1;i <= t;++ i)
    64     {
    65         read(n), read(m);
    66         printf("%lld
    ", lucas(n, m));
    67     }
    68     return 0;
    69 }
    BZOJ2982
  • 相关阅读:
    7.24总结
    7.23总结
    7.22总结
    。。。
    7.21总结
    7.20总结
    7.19总结
    大假期第四次测试总结
    大假期第三次测试
    题目分享k
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/8403721.html
Copyright © 2020-2023  润新知