您的位置:首页 > 产品设计 > UI/UE

HDU 5793 A Boring Question (找规律+快速幂)

2016-08-05 11:17 423 查看

A Boring Question

题目链接:点我打开链接

[align=left]Source[/align]
2016 Multi-University Training Contest 6 

题意:用m个不大于n的数构成一个序列,对每个序列求C(kj+1,kj)的连乘积。求出所有可能的序列,累加这些连乘积。

题解:打表找规律啊。f(n,m)
f(1,2)=3; f(1,6)=7; f(2,2)=7; f(2,6)=43; f(3,2)=15

f(1,3)=4; f(1,7)=8; f(2,3)=13; f(2,7)=57; f(3,3)=40

f(1,4)=5; f(1,8)=9; f(2,4)=21;  f(2,8)=73;  f(3,4)=85

f(1,5)=6; f(1,10)=11; f(2,5)=31; f(2,9)=91;  f(3,5)=156

然后找规律:
f(n,m) = f(n-1,m) + m^n

= m^0 + m^1 + m^2 + ... + m^n; (等比数列求和)

= (1 - m^(n+1)) / (1 - m);

官方题解:



AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;

ll q_mod(ll a,ll n)
{
ll ans=1;
while(n){
if(n&1)ans=ans*a%mod;
n>>=1;
a=a*a%mod;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
ll n,m;
scanf("%lld%lld",&n,&m);
printf("%lld\n",(q_mod(m,n+1)-1)*q_mod(m-1,mod-2)%mod);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: