题解:CF915C Permute Digits
题意
给出两个正整数
。在十进制下重排 ,构造一个不超过 的最大数,不能有前导零。允许不去重排 。
分析
因为位数小于等于 19,考虑搜索。
开个桶维护
每一位贪心地从大到小枚举,显然这是最优的。
最劣复杂度是
Code
#include<bits/stdc++.h> using namespace std; int cnt[10]; string a, b, det; void dfs(int p, bool lead, bool up) { if(!~p) cout<<det, exit(0); int mx=up?b[p]-'0':9; int mn=lead; for(int i=mx;i>=mn;i--) { if(!cnt[i]) continue; cnt[i]--; det+=i+'0'; dfs(p-1, 0, up&&i==b[p]-'0'); cnt[i]++; det.pop_back(); } } int main() { cin>>a>>b; reverse(b.begin(), b.end()); if(a.size()<b.size()) { sort(a.begin(), a.end(), greater<char>()); return cout<<a, 0; } for(auto c:a) cnt[c-'0']++; dfs(a.size()-1, 1, 1); }
本文作者:Jimmy-LEEE
本文链接:https://www.cnblogs.com/redacted-area/p/18389461
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步