题解:
即先将多组输入输出存起来,转化为一组,再排序后暴力求解,
这样数组只需开到100000
#include<stdio.h>
#include<algorithm>
#define Mod 1000000007
using namespace std;
struct stu
{
int x,id,ans;
}a[100010];
int cmp1(stu a,stu b)
{
return a.x<b.x;
}
int cmp2(stu a,stu b)
{
return a.id<b.id;
}
int main()
{
int n,i=0,j;
while(scanf("%d",&n)!=EOF){ //先将多组输入存起来
a[i].x=n;
a[i].id=i;
i++;
}
n=i;
sort(a,a+n,cmp1); //按值从小到大排序
long long t=1,s=1;
j=0;
for(i=1;i<=a[n-1].x;i++){ //暴力求解
t=t*i%Mod;
s=s*t%Mod;
while(j<n&&a[j].x==i) //将对应的答案存到对应的数组中
a[j++].ans=s;
}
sort(a,a+n,cmp2); //按序号排序再输出
for(i=0;i<n;i++)
printf("%d\n",a[i].ans);
return 0;
}