[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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步