算法问题实战策略 CHILDRENDAY
地址 https://algospot.com/judge/problem/read/CHILDRENDAY
题解
ac代码

1 #include <iostream> 2 #include <algorithm> 3 #include <queue> 4 #include <string> 5 #include <vector> 6 7 using namespace std; 8 9 10 //当前顶点的序号为here时 11 //经过序号为edge的边线能到达的顶点序号是多少 12 int append(int here, int edge, int mod) 13 { 14 int there = here * 10 + edge; 15 if (there >= mod) return mod + there % mod; 16 return there % mod; 17 } 18 19 //找出仅由digits内的数组组成 20 //且满足C mod n == m的最小的C 21 string gifts(string digits, int n, int m) 22 { 23 //如果按照升序排列边线序号 24 //就能找出按照字典顺序排在最前面的路径 25 sort(digits.begin(),digits.end()); 26 27 //白色顶点i表示为0号~n-1号的顶点 灰色顶点i表示为n号~2n-1号的顶点 28 //parent[i]=BFS生成树中顶点i的父节点 29 //choice[i]=从parent[i]连向i的边线序号 30 vector<int> parent(2 * n, -1), choice(2 * n, -1); 31 queue<int> q; 32 //将白色0号加入队列 33 parent[0] = 0; 34 q.push(0); 35 while (!q.empty()) { 36 int here = q.front(); 37 q.pop(); 38 for (int i = 0; i < digits.size(); i++) { 39 //跟踪边线digits[i[-'0' 40 int there = append(here, digits[i] - '0', n); 41 if (parent[there] == -1) { 42 parent[there] = here; 43 choice[there] = digits[i] - '0'; 44 q.push(there); 45 } 46 } 47 } 48 49 //未能达到灰色m号 则失败! 50 if (parent[n + m] == -1) return "IMPOSSIBLE"; 51 //跟踪连向父节点的路径并计算C 52 string ret; 53 int here = n + m; 54 while (parent[here] != here) { 55 ret += char('0' + choice[here]); 56 here = parent[here]; 57 } 58 reverse(ret.begin(), ret.end()); 59 return ret; 60 } 61 62 63 int main() 64 { 65 int n; 66 cin >> n; 67 while (n--) { 68 string s; 69 int a, b; 70 cin >> s >> a >> b; 71 72 cout << gifts(s, a, b) << endl; 73 } 74 }
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2016-11-21 打印任意字符串排列组合