NC18985 数字权重
题目
题目描述
小a有一个n位的数字,但是它忘了各个位上的数是什么,现在请你来确定各个位上的数字,满足以下条件:
设第i位的数为ai,其中a1为最高位,an为最低位,K为给定的数字
- 不含前导0
请你求出满足条件的方案数
输入描述
两个整数N, K
若存在无解的情况,请输出0
输出描述
一个整数表示答案,对10^9 + 7取模
示例1
输入
2 3
输出
6
说明
满足条件的数有:14, 25, 36, 47, 58, 69
示例2
输入
2 -3
输出
7
说明
满足条件的数有:41, 52, 63, 74, 85, 96, 30
示例3
输入
4 3
输出
600
说明
可能的方案有:1234, 1334
示例4
输入
4 -3
输出
700
备注
对于30%的数据:n, |k| = 5
对于60%的数据:n, |k| ≤ 1000
对于100%的数据:n, |k| ≤ 10^13
保证n > 1
题解
知识点:组合数学。
简化一下条件: ,其他位没有限制。
因为不能有前导 ,因此 ,同时 ,因此 ,我们取交集即可。
时间复杂度
空间复杂度
代码
#include <bits/stdc++.h> using namespace std; using ll = long long; const int P = 1e9 + 7; int qpow(int a, ll k) { int ans = 1; while (k) { if (k & 1) ans = 1LL * ans * a % P; k >>= 1; a = 1LL * a * a % P; } return ans; } /// 快速幂,O(logk),底数越大速度慢的越快 int main() { std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); ll n, k; cin >> n >> k; ll l = max(-k, 1LL), r = min(9 - k, 9LL); cout << max(r - l + 1, 0LL) * qpow(10, n - 2) % P << '\n'; return 0; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/17658277.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧