B题 推公式

赛时一直在推公式,赛后才做出来

n=1ans=0n=1\quad ans=0

n=2ans=k2n=2\quad ans=k^2

n=3ans=2k3+2k4n=3\quad ans=2k^3+2k^4

n=4ans=3k4+4k5+3k6n=4\quad ans=3k^4+4k^5+3k^6

n=5ans=4k5+6k6+6k7+4k8n=5\quad ans=4k^5+6k^6+6k^7+4k^8

这几个全靠手推,然后找规律

...

ans=i=1n1i(ni)kn+i1 ans=\sum_{i=1}^{n-1}i(n-i)k^{n+i-1}

代码

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll MOD=1e9+7;
ll pow2(ll a,ll b,ll mod){ll r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b>>=1;}return r%mod;}
ll n,k,ans;
int main(){
    cin>>n>>k;
    ll x=pow2(k,n,MOD);
    for(int i=1;i<n;i++)
        ans=(ans+i*(n-i)%MOD*x)%MOD,x=x*k%MOD;
    cout<<ans;
}