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



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