题解 | #加密#

不降数

https://ac.nowcoder.com/acm/contest/11170/C

只有C题,快速幂+除法取模+公式法
由于本方法为公式法,如果你是因为被卡时间而做不对的话,可以看一下;如果完全不会做这个题,就看官方题解吧!
如果你能正确的打表,就会发下如下事实:
当最后一位为时,

,只有种情况(全1)

,有

,有

,有
一直求到就够了。
那么结果就是全加起来呗
因为这里面有除法,所以还需要具备除法取模的知识

又因为c很大,所以还要求快速幂的知识。。这里就不讲了

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int ll;
typedef pair<int, int> pii;
#define _rp(i, a, b) for (int i = a; i < b; i++)
void PP() {
    ios::sync_with_stdio(false);
    cout.tie(NULL);
}
const int N = 1e8 + 2;
const ll mod = 100019;
void check() {}
// int a[N][10];
int n, m;
ll now[10];
inline int MOD(int a) {
    if (a < mod)
        return a;
    else
        return a % mod;
}
ll get_pow(ll x, ll n) {
    ll ans = 1;
    while (n) {
        if (n & 1) {
            ans = ans * x % mod;
        }
        x = x * x % mod;
        n >>= 1;
    }
    return (ans + mod) % mod;
}
int main() {
    void PP();
    ll n;
    cin >> n;
    if (n == 1) {
        cout << 9;
        return 0;
    }
    if (n == 2) {
        cout << 45;
        return 0;
    }
    now[1] = 1;
    _rp(i, 2, 10) {
        // 原来应该长这样
        // now[i] = (now[i - 1] * ((n + i - 2)/ (i - 1)) % mod) % mod ;
        now[i] = now[i - 1] * (n + i - 2) % mod * get_pow(i - 1, mod - 2) % mod;
        now[i] %= mod;
    }
    cout << accumulate(now + 1, now + 10, 0) % mod;
    return 0;
}
全部评论

相关推荐

6 收藏 评论
分享
牛客网
牛客企业服务