#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
const ll MOD = 1e9 + 7;
const int MAXN = 1000007;
ll P[MAXN];
ll FastPow(ll a, ll b){
ll res = 1;
a %= MOD;
while(b > 0){
if(b % 2 == 1) res = res * a % MOD;
a = a * a % MOD;
b /= 2;
}
return res;
}
void solve(){
ll n, k, m;
cin >> n >> k >> m;
ll invK = FastPow(k, MOD - 2), S = 1, Q = 1, ans = 0;
P[0] = 1;
for(int v = 0; v < m; v++){
if(v > 0){
P[v] = S * invK % MOD;
S = (S + P[v]) % MOD;
if(v >= k) S = (S - P[v - k] + MOD) % MOD;
}
ll w_count = max(0LL, min((ll)k, (ll)v + k - m + 1));
ll p_win = w_count * invK % MOD;
ll T = P[v] * p_win % MOD;
ll term = 0;
if(T == 0) term = P[v] * n % MOD * FastPow(Q, n - 1) % MOD;
else term = P[v] * ((FastPow(Q, n) - FastPow((Q - T + MOD) % MOD, n) + MOD) % MOD) % MOD * FastPow(T, MOD - 2) % MOD;
ans = (ans + term) % MOD;
Q = (Q - T + MOD) % MOD;
}
cout << ans << '\n';
}
bool multi = 0;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t = 1;
if(multi) cin >> t;
while(t--){
solve();
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; const ll MOD = 1e9 + 7; const int MAXN = 1000007; ll P[MAXN]; ll FastPow(ll a, ll b){ ll res = 1; a %= MOD; while(b > 0){ if(b % 2 == 1) res = res * a % MOD; a = a * a % MOD; b /= 2; } return res; } void solve(){ ll n, k, m; cin >> n >> k >> m; ll invK = FastPow(k, MOD - 2), S = 1, Q = 1, ans = 0; P[0] = 1; for(int v = 0; v < m; v++){ if(v > 0){ P[v] = S * invK % MOD; S = (S + P[v]) % MOD; if(v >= k) S = (S - P[v - k] + MOD) % MOD; } ll w_count = max(0LL, min((ll)k, (ll)v + k - m + 1)); ll p_win = w_count * invK % MOD; ll T = P[v] * p_win % MOD; ll term = 0; if(T == 0) term = P[v] * n % MOD * FastPow(Q, n - 1) % MOD; else term = P[v] * ((FastPow(Q, n) - FastPow((Q - T + MOD) % MOD, n) + MOD) % MOD) % MOD * FastPow(T, MOD - 2) % MOD; ans = (ans + term) % MOD; Q = (Q - T + MOD) % MOD; } cout << ans << '\n'; } bool multi = 0; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; if(multi) cin >> t; while(t--){ solve(); } return 0; } |
English