hdu 5139 Formula

时间:2022-01-16 00:31:17

http://acm.hdu.edu.cn/showproblem.php?pid=5139

思路:这道题要先找规律,f(n)=n!*(n-1)!*(n-2)!.....1!;  不能直接打表,而是离线处理,一次性处理出来。

 #include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
#define ll long long
#define mod 1000000007
#define N 100010
using namespace std; ll n;
struct node
{
ll c,id,m;
bool operator <(const node &a)const
{
return id<a.id;
}
}p[N];
bool cmp1(node a,node b)
{
return a.c<b.c;
} int main()
{
int t1=;
while(scanf("%lld",&n)!=EOF)
{
p[t1].c=n;
p[t1].id=t1;
t1++;
}
sort(p,p+t1,cmp1);
ll s=;
ll ans=;
int cnt=;
for(int x=; x<=p[t1-].c; x++)
{
s=s*x%mod;
ans=ans*s%mod;
while(cnt<t1&&p[cnt].c==x)
{
p[cnt].m=ans;
cnt++;
}
}
sort(p,p+t1);
for(int i=; i<t1; i++)
{
printf("%lld\n",p[i].m);
}
return ;
}