码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4704 Sum

时间:2018-12-03 00:58:24      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:can   span   快速幂   include   排列   题意   char   style   class   

题意

  给一个n , s(k):=(x1,x2,....,xk)的排列数(x1+x2+.....+xk=n)

  求[s(1)+s(2)+.....+s(n)] mod 1e9+7

思路

  用隔板法s(i)=C(n-1,i-1);∑s(i)(1<=i<=n)=2^n;

  接下来就是算2^N,N是一个很大的数。根据(2^123)^10*2^4(mod m)=2^1234(mod m)就可以递推出结果了;

#include<bits/stdc++.h>
using namespace std;
int power(int a,int n,int mod){//快速幂
    long long ret=1;
    long long k=a;
    while(n){
        if(n&1){
            ret*=k;
            ret%=mod;    
        }
        k=(k*k)%mod;
        n>>=1;
    }    
    return (int)ret;
}
int main(){
    char c;
    const int mod=1e9+7;
    int num=2;
    while(cin>>c){
        num=power(2,c-0,mod);
        while(scanf("%c",&c)){
            if(c==\n)break;
                num=power(num,10,mod);
                num=(1LL*num*power(2,c-0,mod))%mod;        
        }
        if(num%2==0)cout<<num/2<<endl;
        else cout<<(num+mod)/2<<endl;
    }    
    return 0;
}

 

HDU 4704 Sum

标签:can   span   快速幂   include   排列   题意   char   style   class   

原文地址:https://www.cnblogs.com/Gsimt/p/10056112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!