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;
}