您的位置:首页 > 其它

hdu 4602(2013多校联赛第一场1003)

2013-07-23 19:42 148 查看
点击打开链接

题意:

给你求在

4=1+1+1+1
  4=1+1+2
  4=1+2+1
  4=2+1+1
  4=1+3
  4=2+2
  4=3+1
  4=4

中某个值出现的次数

4中3的个数2,2的个数5,1的个数12

显然也可以找出

5中4的个数2,3的个数5,2的个数12,1的个数28

6中5的个数2,4的个数5,3的个数12,2的个数28,1的个数64

显然2->5->12->28->64

5=2*2+2^0

12=5*2+2^1

28=12*2+2^4

依次可以找出公式an=2^n+2^(n-2)*(n-1);

那个快速幂就ok了

#include"stdio.h"
#include"string.h"
#define N 1000000007
typedef __int64 LL;
LL pow(LL a,LL b)
{
LL ans=1;
a%=N;
while(b)
{
if(b%2)ans*=a;
ans%=N;
a=(a*a)%N;
b/=2;
}
return ans%N;
}
int main()
{
int T;
int n,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
if(n==k)
{
printf("1\n");
continue;
}
else if(k>n)
{
printf("0\n");
continue;
}
LL ans;
n-=k;
if(n==1)
{
printf("2\n");
continue;
}
ans=(pow(2,n)%N+((pow(2,n-2)%N)*((n-1)%N))%N)%N;
printf("%I64d\n",ans%N);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速幂 找规律