2014/12/7
这题不会做。。
数据离散处理竟然不知道。。刷题也是刷给狗吃了。。
像二分->三分这种思路。。
最后自己写的时候。
离散处理:我是隔5个记录一次,但是是从第五个开始记录的。把 1 忘记记录了。。
后来改过来就对了。
#include<stdio.h>
#include<string.h>
#define mod 1000000007
int s[2000005];
int ss[2000005];
int main()
{
s[0] = 1;
ss[0] =1;
__int64 a = 1,t = 1;
int cnt = 1;
for(int i = 1;i <= 10000000; i++)
{
t=t*i%mod;
a=a*t%mod;
if(i%5 == 0)
{
s[cnt] = t;
ss[cnt++] = a;
}
}
int n;
while(~scanf("%d",&n))
{
__int64 sum ;
__int64 a,b;
sum = ss[n/5];
a = s[n/5];
for(int i =n/5 * 5 + 1;i <= n; i++)
{
a=a*i%mod;
sum = sum*a %mod;
}
printf("%I64d\n",sum);
}
return 0;
}