NC235247 Sramoc问题

题目链接

题目

题目描述

Sramoc(K,M) 表示用数字 0,1,2,3,4,...,k1 组成的自然数中能被M整除的最小数。给定 K,M 2K10,1M1000 ,求 Sramoc(K,M) 。例如 K=2,M=7 的时候, Sramoc(2,7)=1001

输入描述

第一行为两个整数 K,M

输出描述

输出 Sramoc(K,M)

示例1

输入

2 7

输出

1001

题解

知识点:BFS,数学。

由于数字可能很大,所以用 string 存储。注意到整除和余数相关,而且要求最小整数,因此同一个余数显然是较早经历过的更优,因此扩展时如果余数已经存在,则不扩展。

扩展时可以用余数直接做余数运算,利用了同余的性质。

时间复杂度 O(?)

空间复杂度 O(M)

代码

#include <bits/stdc++.h>
using namespace std;
int k, m;
bool vis[1007];
struct node {
string num;
int r;
};
string bfs() {
queue<node> q;
for (int i = 1;i < k;i++) {
string s(1, '0' + i);
q.push({ s,i % m });
vis[i % m] = 1;
}
while (!q.empty()) {
node cur = q.front();
q.pop();
if (!cur.r) return cur.num;
for (int i = 0;i < k;i++) {
string s(1, '0' + i);
string nnum = cur.num + s;
int rr = (cur.r * 10 + i) % m;
if (vis[rr]) continue;
vis[rr] = 1;
q.push({ nnum,rr });
}
}
return "null";
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> k >> m;
cout << bfs() << '\n';
return 0;
}
posted @   空白菌  阅读(156)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示