BestCoder Round #21 1002

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章