• [HDOJ6114] Chess(组合数)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6114

    其实就是n*m的格子里放棋子,当前层的棋子必须在上一层的右边,问多少种放法。

    其实就是求组合数,注意n m大小。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long LL;
     5 const LL mod = 1e9+7;
     6 const int maxn = 110000;
     7 int n, m;
     8 LL f[maxn];
     9 
    10 void init() {
    11   f[0] = f[1] = 1;
    12   for(int i = 2; i < maxn; i++) f[i] = (f[i-1] * i) % mod;
    13 }
    14 
    15 LL mul(LL x, LL n) {
    16   LL ret = 1;
    17   while(n) {
    18     if(n & 1) ret = (ret * x) % mod;
    19     n >>= 1;
    20     x = (x * x) % mod;
    21   }
    22   return ret;
    23 }
    24 LL exgcd(LL a, LL b, LL &x, LL &y) {
    25   if(b == 0) {
    26     x = 1;
    27     y = 0;
    28     return a;
    29   }
    30   else {
    31     LL ret = exgcd(b, a%b, x, y);
    32     LL tmp = x;
    33     x = y;
    34     y = tmp - a / b * y;
    35     return ret;
    36   }
    37 }
    38 LL inv(LL a) {
    39   LL x, y;
    40   exgcd(a, mod, x, y);
    41   return (x % mod + mod) % mod;
    42 }
    43 LL C(LL x, LL y) {
    44   return f[x] * inv(f[x-y]) % mod * inv(f[y]) % mod;
    45 }
    46 
    47 signed main() {
    48     // freopen("in", "r", stdin);
    49     init();
    50     int T;
    51     scanf("%d", &T);
    52     while(T--) {
    53         scanf("%d%d",&n,&m);
    54         if(n == m) {
    55             printf("1
    ");
    56             continue;
    57         }
    58         if(n > m) swap(n, m);
    59         printf("%I64d
    ", C(m,n));
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    IOTest-InputStream-OutputStream
    JSP
    java链表
    区块链
    MySQL常用命令
    jQuery
    javascript
    Nginx
    Linux
    Hive
  • 原文地址:https://www.cnblogs.com/kirai/p/7388980.html
Copyright © 2020-2023  润新知