首页 > 代码库 > HDU 5139 Formula --离线处理
HDU 5139 Formula --离线处理
题意就不说了,求公式。
解法: 稍加推导能够得出 : f(n) = n! * f(n-1) , 即其实是求: ∏(n!) ,盲目地存下来是不行的,这时候看见条件: 数据组数 <= 100000, 那么我们可以离线做,先把他们存下来,然后再从小到大扫一边, 也就是最多10000000次乘法的复杂度。然后离线输出即可。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#define Mod 1000000007#define ll long longusing namespace std;#define N 100002ll ans[N];struct node { int n,ind;}a[N];int cmp(node ka,node kb) { return ka.n < kb.n; }int main(){ int tot = 0,i,n; while(scanf("%d",&n)!=EOF) { a[++tot].n = n; a[tot].ind = tot; } sort(a+1,a+tot+1,cmp); ll fac = 1, f = 1; int j = 1; for(i=1;i<=tot;i++) { while(j <= a[i].n) { fac = fac*j%Mod; f = f*fac%Mod; j++; } ans[a[i].ind] = f; } for(i=1;i<=tot;i++) cout<<ans[i]<<endl; return 0;}
HDU 5139 Formula --离线处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。