您的位置:首页 > 大数据 > 人工智能

2013 Multi-University Training Contest 1

2013-07-23 17:07 260 查看
1003 Partition

这题就是组合找规律,从1到n的出现数量依次减少,将n作为第一项,依次后一项为前一项的两倍加上2的项数减2次方。。不知道为什么longlong就是WA,__int64却过了,,各种无语中。。。。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define N 1000000007
using namespace std;
long long p(long long x,long long y)//快速幂取模
{
long long res=1;
while(y>0)
{
if(y%2==1)
{
res=(res*x)%N;
}
x=(x*x)%N;
y/=2;
}
return res%N;
}
int main()
{
int t;
__int64 a,b,sum;
scanf("%d",&t);
for(int i = 0; i < t; ++i)
{
scanf("%I64d%I64d",&a,&b);
if(b==a)
{
cout<<1<<endl;
}
else if(b>a)
{
cout<<0<<endl;
}
else
{
sum=p(2,a-b)%N;
sum=(sum%N+((a-b-1)*p(2,(a-b-2)))%N)%N;//推的公式
printf("%I64d\n",sum);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU 多校