提交时间:2023-01-19 23:00:52

运行 ID: 67846

#include <bits/stdc++.h> using namespace std; const int N = 1e4 + 10; long long a[N]; int n, k, p; inline bool f_pow(int a, int b){ int base = 1, l_base = 0; for(; b; b >>= 1, a *= a){ if(b & 1){ l_base = base; base *= a; if(base < l_base || a <= 0) return false; } } return n > base; } int main(){ scanf("%d%d%d", &n, &k, &p); a[0] = k-1; for(int i = 1; i < N; i++){ a[i] = k * a[i-1]; } long long ans = 0; if(f_pow(k, p)){ int base = 1; for(int i = 1; i <= p; i++){ base *= k; ans += base; } } else{ ans = (long long)n * (long long)p; for(int i = 0; n > 0; i++){ if(n > a[i]){ ans -= i * a[i]; n -= a[i]; } else{ ans -= i * (n-1); n -= a[i]; } } } printf("%lld", ans); return 0; }