标签:des style blog http io ar color os sp
找规律
f(1)=1
f(2)=1*1*2=(1)*(1*2)=1!*2!
f(3)=1*1*1*2*2*3=(1)*(1*2)*(1*2*3)=1!*2!*3!
式子可以简化为 f(n)=∏i=1n(n!)%MOD ,直接打表不行,会超内存,可以对数据进行离线处理。排好序之后从小到大暴力。ClogC+10000000 ,C为case数目。
2 100
2 148277692
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long int LL;
const LL maxn=10001000;
const LL mod=1000000007;
int a,id;
struct QUE
{
int x,id;
LL ans;
}que[maxn];
bool cmp1(QUE a,QUE b)
{
return a.x<b.x;
}
bool cmp2(QUE a,QUE b)
{
return a.id<b.id;
}
LL now,nowans;
LL nowjiecheng;
LL jiec(LL x)
{
for(int i=now+1;i<=x;i++)
{
nowjiecheng=(nowjiecheng*i)%mod;
}
now=x;
return nowjiecheng;
}
int main()
{
while(scanf("%d",&a)!=EOF)
{
que[id].x=a; que[id].id=id;
id++;
}
sort(que,que+id,cmp1);
now=1,nowans=1,nowjiecheng=1;
for(int i=0;i<id;i++)
{
if(que[i].x==now)
{
que[i].ans=nowans;
}
else if(que[i].x>now)
{
LL temp=1;
for(int j=now+1;j<=que[i].x;j++)
{
temp=(temp*jiec(j))%mod;
}
nowans=(nowans*temp)%mod;
que[i].ans=nowans;
}
}
sort(que,que+id,cmp2);
for(int i=0;i<id;i++)
{
cout<<que[i].ans<<endl;
}
return 0;
}
标签:des style blog http io ar color os sp
原文地址:http://blog.csdn.net/ck_boss/article/details/41846711