Processing math: 0%

[NC189A]数字权重

题目大意:有一个n位的数,设第i位为a_i(最高位为a_1)。问满足(\sum\limits_{i=2}^n(a_i-a_{i-1}))==k的数的个数(不含前导零)

解:发现(\sum\limits_{i=2}^n(a_i-a_{i-1}))==k\Leftrightarrow a_n-a_1==k。然后枚举a_1判断a_n是否合法就行了

卡点:模数为10^9+7,写成10^{10}+7

C++ Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>
const long long mod = 1000000007;
long long n, k, ans;
long long pw(long long base, long long p) {
    long long res = 1;
    for (; p; p >>= 1, base = base * base % mod) if (p & 1) res = res * base % mod;
    return res;
}
int main() {
    scanf("%lld%lld", &n, &k);
    for (int i = 1; i < 10; i++) {
        if (i + k < 10 && i + k >= 0) (ans += pw(10, n - 2)) %= mod;
    }
    printf("%lld\n", ans);
    return 0;
}

 

posted @   Memory_of_winter  阅读(290)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示