码迷,mamicode.com
首页 > 其他好文 > 详细

[SDOI2016]部分题选做

时间:2016-07-21 12:36:34      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

听说SDOI蛮简单的,但是SD蛮强的..

之所以是选做,是因为自己某些知识水平还不到位,而且目前联赛在即,不好花时间去学sa啊之类的..

bzoj4517

数论题,我这种不会错排的数论白痴都能手推出来,这题应该谁都能写吧。

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mo 1000000007
#define ll long long
#define N 1000100
using namespace std;
ll jie[N],g[N],f[N],ni[N];
ll quickmi(ll x)
{
    ll tmp=1,k=mo-2,a=x;
    while(k>0)
    {
        if(k%2==1)
        {
            tmp=tmp*a%mo;
        }
        a=a*a%mo;
        k/=2;
    }
    return tmp;
}
ll cc(int n,int m)
{
    return jie[n]*ni[m]%mo*ni[n-m]%mo;
}
int main()
{
    jie[0]=1;
    for(int i=1;i<=1000000;i++)jie[i]=(jie[i-1]*i)%mo; 
    ni[0]=1;ni[1]=1;
    for(int i=1;i<=1000000;i++)
      {
          ni[i]=quickmi(jie[i]);
      }
    f[0]=1;f[1]=0;f[2]=1;f[3]=2;
    g[0]=0;g[1]=1;g[2]=2;g[3]=9;
    for(int i=4;i<=1000000;i++)
    {
            f[i]=g[i-1]%mo;
            g[i]=(f[i-1]+g[i-1])%mo*i%mo;
    }  
    int cas,n,m;
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&n,&m);
        ll ans=cc(n,m)*f[n-m]%mo;
        printf("%lld\n",ans);
    }
 } 
bzoj4517

 

[SDOI2016]部分题选做

标签:

原文地址:http://www.cnblogs.com/wxxlouisa/p/5691258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!