zoukankan      html  css  js  c++  java
  • Wand FZU

    N wizards are attending a meeting. Everyone has his own magic wand. N magic wands was put in a line, numbered from 1 to n(Wand_i owned by wizard_i). After the meeting, n wizards will take a wand one by one in the order of 1 to n. A boring wizard decided to reorder the wands. He is wondering how many ways to reorder the wands so that at least k wizards can get his own wand.

    For example, n=3. Initially, the wands are w1 w2 w3. After reordering, the wands become w2 w1 w3. So, wizard 1 will take w2, wizard 2 will take w1, wizard 3 will take w3, only wizard 3 get his own wand.

    Input

    First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

    For each test case: Two number n and k.

    1<=n <=10000.1<=k<=100. k<=n.

    Output

    For each test case, output the answer mod 1000000007(10^9 + 7).

    Sample Input

    2
    1 1
    3 1
    

    Sample Output

    1
    4

    现在一群 wizard 在开会,进入会议室的时候,每个人将自己的 wand 放到了桌子上,现在开会结束了,
    在 wizard 们将要离开的时候,将 wand 原来的摆放顺序打乱,那 wizard 将桌子上的 wang 拿走时: 
    要求:至少有 K 个人拿到的是自己原来的 wand 。问,有多少种打乱顺序的方法
    首先在 n 个中拿出 k 到 n 个,是放在原来的位置,方法有 C(n,i)种,然后将剩下的那些 wand 错排

    预处理阶乘逆元

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <queue>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <set>
     7 #include <iostream>
     8 #include <map>
     9 #include <stack>
    10 #include <string>
    11 #include <vector>
    12 #define  pi acos(-1.0)
    13 #define  eps 1e-6
    14 #define  fi first
    15 #define  se second
    16 #define  lson l,m,rt<<1
    17 #define  rson m+1,r,rt<<1|1
    18 #define  bug         printf("******
    ")
    19 #define  mem(a,b)    memset(a,b,sizeof(a))
    20 #define  fuck(x)     cout<<"["<<x<<"]"<<endl
    21 #define  f(a)        a*a
    22 #define  sf(n)       scanf("%d", &n)
    23 #define  sff(a,b)    scanf("%d %d", &a, &b)
    24 #define  sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
    25 #define  sffff(a,b,c,d) scanf("%d %d %d %d", &a, &b, &c, &d)
    26 #define  pf          printf
    27 #define  FRE(i,a,b)  for(i = a; i <= b; i++)
    28 #define  FREE(i,a,b) for(i = a; i >= b; i--)
    29 #define  FRL(i,a,b)  for(i = a; i < b; i++)
    30 #define  FRLL(i,a,b) for(i = a; i > b; i--)
    31 #define  FIN         freopen("DATA.txt","r",stdin)
    32 #define  gcd(a,b)    __gcd(a,b)
    33 #define  lowbit(x)   x&-x
    34 #pragma  comment (linker,"/STACK:102400000,102400000")
    35 using namespace std;
    36 typedef long long  LL;
    37 const int INF = 0x7fffffff;
    38 const int mod = 1e9 + 7;
    39 const int maxn = 1e5 + 10;
    40 int n, k, t;
    41 LL ans[maxn], a = 0, b = 1;
    42 void init() {
    43     ans[1] = a, ans[2] = b;
    44     for (int i = 3 ; i <= 10010 ; i++) {
    45         ans[i] = (((i - 1) % mod) * ((a + b) % mod)) % mod;
    46         a = b;
    47         b = ans[i];
    48     }
    49 }
    50 LL C(int k, int n) {
    51     LL ret = 1;
    52     for (int i = n - k + 1; i <= n; i++)  ret *= i;
    53     for (int i = 2; i <= k; i++)  ret /= i;
    54     return ret;
    55 }
    56 LL c[20000010];
    57 
    58 long long modexp(long long a, long long b, int mod) {
    59     long long res = 1;
    60     while(b > 0) {
    61         if (b & 1) res = res * a % mod;
    62         b = b >> 1;
    63         a = a * a % mod;
    64     }
    65     return res;
    66 }
    67 
    68 void cal() {
    69     LL ans = 1;
    70     for(int i = 1; i <= 1e7; i ++) {
    71         ans *= i;
    72         ans %= mod;
    73         c[i] = ans;
    74     }
    75 }
    76 int main() {
    77     cal();
    78     c[0] = 1;
    79     init();
    80     sf(t);
    81     while(t--) {
    82         sff(n, k);
    83         LL ret = 1;
    84         for (int i = k ; i <= n ; i++) {
    85             LL fz = c[n];
    86             LL fm = (c[i] * c[n - i]) % mod;
    87             LL a1 = (fz * (modexp(fm, mod - 2, mod) % mod)) % mod;
    88             ret = (ret + a1 * ans[n - i] % mod) % mod;
    89         }
    90         printf("%lld
    ", ret % mod);
    91     }
    92     return 0;
    93 }



  • 相关阅读:
    吃货联盟项目
    字串符笔记
    带有参的方法
    js:自动亮起100盏灯
    JS字面量创建方式的优缺点
    为什么说对象字面量赋值比new Object()高效?
    javascript 字面量
    vue学习(一)、Vue.js简介
    Redis(二):c#连接Redis
    Redis(一):centos下安装。
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/9514821.html
Copyright © 2011-2022 走看看