HDU 4602

来源:互联网 发布:windows重启网卡命令 编辑:程序博客网 时间:2024/05/22 09:04

a[1]=1;

a[2]=2;

a[n]=2*a[n-1]+2^(n-3)=2^2*a[n-2]+2*2^(n-3)=2^3a[n-3]+3*2^(n-3)=……=2^(n-2)a[2]+(n-2)*2^(n-3)=2^(n-1)+(n-2)*2^(n-3);

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<string>using namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define mod 1000000007#define N 100005ll t,n,k;ll pm(ll x,ll y){ll ret=1,temp=x;while(y){if(y&1)ret=ret*temp%mod;temp=temp*temp%mod;y>>=1;}return ret;}int main(){scanf("%I64d",&t);while(t--){scanf("%I64d%I64d",&n,&k);if(n<k)printf("0\n");else{n=n-k+1;if(n==1)printf("1\n");else if(n==2)printf("2\n");else printf("%I64d\n",(pm(2,n-1)%mod+pm(2,n-3)*(n-2)%mod)%mod);}}return 0;}


原创粉丝点击