zoukankan      html  css  js  c++  java
  • “Shopee杯” e起来编程暨武汉大学2020年大学生程序设计大赛决赛(重现赛)D--Deploy the medical team(排列组合+快速幂)

    地址:https://ac.nowcoder.com/acm/contest/5523/D

         题意:n个人,m个人可以成为队长。队长不同的队伍视为不同队伍。问可以组成的队伍数。

         解析:推一下,就是m*(Cn-1 ,1+ Cn-1 , 2+Cn-1 ,3+.......+Cn-1 , n-1 +1)然后需要知道一个高中排列组合学到的知识点:Cnm,1<=m<=n,那么(Cn,1+Cn,2+...+Cn , n)总和就是2^n - 1。所以本题就是:m*(2^(n-1)-1+1)=m*(2^(n-1))。套一下快速幂就可以了。

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    int qk(ll a, ll b,ll c)
    {
        ll ans=1;
        a=a%c;
        while(b)
        {
            if(b%2==1)
                ans=(ans*a)%c;
            b=b/2;
            a=(a*a)%c;
        }
        return  ans;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            ll n,m;
            scanf("%lld%lld",&n,&m);
            cout<<m*(qk(2,n-1,mod))%mod<<endl;
        }
    }
  • 相关阅读:
    [Hadoop]
    [Linux]
    [Linux]
    [Hadoop]
    [Hadoop]
    vue-学习笔记-API-全局配置
    vue 风格指南-必须的
    vue 学习笔记-复用-自定义指令
    vue学习笔记-过滤器
    vue 学习笔记-复用-对象混入
  • 原文地址:https://www.cnblogs.com/liyexin/p/12782544.html
Copyright © 2011-2022 走看看