hdu 4602——Partition

来源:互联网 发布:京东为什么比淘宝贵 编辑:程序博客网 时间:2024/06/10 00:18

找规律

a(n)=(n+3)*2^(n-2)        

a(n+1) = 2*a(n) + 2^(n-1)  a0=1 a1=2

1 2 5 12

 

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define mod 1000000007#define LL __int64LL Pow(LL n){    if(n==1)        return 2;    if(n==0)        return 1;    LL c=Pow(n/2);    if(n&1)        return (c*2*c)%mod;    return (c*c)%mod;}int main(){    LL t;    cin>>t;    while(t--)    {        LL n,m;        scanf("%I64d%I64d",&n,&m);        n=n-m;        if(n<0)        {        cout<<"0"<<endl;        continue;        }        if(n==0)        {            cout<<"1"<<endl;            continue;        }        if(n==1)        {            cout<<"2"<<endl;            continue;        }        printf("%I64d\n",(n+3)*Pow(n-2)%mod);    }    return 0;}//a(n)=(n+3)*2^(n-2) 1 2 5 12//a(n+1) = 2*a(n) + 2^(n-1)  a0=1 a1=2