首页 > 代码库 > HDU 5139
HDU 5139
题目意思是f(n)=1!*2!*...*n!
求f(n);
如果直接开个10^7大的数组,会直接超内存
而时间是2s,所以用时间换内存
就开了两个10^6的数组,n[i]表示(i*10)!,f[i]表示f(i*10);
(注意运算过程就爆int)
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int N=1000002; 5 const int mod=1000000007; 6 int n[N],f[N]; 7 void getnum(){ 8 n[0]=f[0]=1; 9 for(int i=1;i<N;i++){10 int tem=n[i-1];11 f[i]=f[i-1];12 for(int j=(i-1)*10+1;j<=i*10;j++){13 tem=(long long) tem*j%mod;14 f[i]=(long long) f[i]*tem%mod;15 }16 n[i]=tem;17 }18 }19 int main()20 { getnum();21 int a;22 while(scanf("%d",&a)!=EOF){23 if(a%10==0)printf("%d\n",f[a/10]);24 else {25 int i,k,j=a%10;26 i=k=a/10;27 int tem=n[i],sum=f[i];28 for(i=i*10+1;i<=a;i++){29 tem=(long long) tem*i%mod;30 sum=(long long) sum*tem%mod;31 }32 printf("%d\n",sum);33 }34 }35 return 0;36 }
HDU 5139
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。