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

(HDU 5793)2016 Multi-University Training Contest 6 A Boring Question (规律)

2016-08-06 19:55 519 查看

思路

打表发现规律。。

对于m相同时,答案是以m为比的等比数列的和

ans=mn+1−1m−1

打表代码

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=a;i<b;i++)
#define debug(a) printf("a =: %d\n",a);
const int INF=0x3f3f3f3f;
const int maxn=1e6+50;
const int Mod=1000000007;
const double PI=acos(-1);
typedef long long ll;
using namespace std;

int n,m;

ll sum=0;

ll jc(ll x){
ll ret=1;
for(ll i=2;i<=x;i++) ret=ret*i;
return ret;
}
ll get(ll kj1,ll kj){
return jc(kj1)/jc(kj)/jc(kj1-kj);
}
void dfs(int dep,vector<int> v,int cur){
if (dep==m){
ll ret=1;
for(int i=0;i<dep-1;i++){
ret=ret*get(v[i+1],v[i]);
}
//  cout<<ret<<endl;
sum+=ret;
return;
}else if (dep>m) return;
for(int i=cur;i<=n;i++){
vector<int> vv(v);
vv.push_back(i);
dfs(dep+1,vv,i);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif

for(m=1;m<=10;m++)
for(n=1;n<=10;n++){

sum=0;
vector<int> v;

dfs(0,v,0);

cout<<n<<" "<<m<<" "<<sum<<endl;
}

return 0;
}


代码

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=a;i<b;i++)
#define debug(a) printf("a =: %d\n",a);
const int INF=0x3f3f3f3f;
const int maxn=1e6+50;
const int Mod=1000000007;
const double PI=acos(-1);
typedef long long ll;
using namespace std;

int n,m;

// n m
// m^0+m^1+...+m^n

ll qPow(ll x,ll n){
ll ret=1;
while(n){
if (n&1) ret=(ret*x)%Mod;
x=(x*x)%Mod;
n>>=1;
}
return ret;
}

ll solve(){
ll fz=(qPow(m,n+1)-1+Mod)%Mod;

ll fmr=qPow(m-1,Mod-2);

//  cout<<fz<<" "<<fmr<<endl;
return (fz*fmr)%Mod;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int T; scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
printf("%lld\n",solve());
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐