# 官方题解|欢乐赛#42 T5
2025-03-12 15:33:33
发布于:浙江
31阅读
0回复
0点赞
T5
思路分析
本题是一道类似于2024csp-jT3的一道题,需要分类讨论。要想最大,我们肯定要想 最长,所以我们尽可能的通过一些小的阶乘来替换大的阶乘。例如,我们可以通过 和 来替换 从产生的贡献,还有一些类似的替换方法,详细见代码。我们统计出每个数最多可以出现的次数,然后按照字典序最大的方式输出即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n, cnt[N];
string s;
int main(){
cin >> s;
for(auto it : s){
if(it == '1') cnt[1] ++;
if(it == '2') cnt[2] ++;
if(it == '3') cnt[3] ++;
if(it == '4') cnt[3] ++, cnt[2] += 2;//4!=3!*2!*2!
if(it == '5') cnt[5] ++;
if(it == '6') cnt[5] ++, cnt[3] ++;//6!=5!*3!
if(it == '7') cnt[7] ++;
if(it == '8') cnt[7] ++, cnt[2] += 3;//8!=7!*2!*2!*2!
if(it == '9') cnt[7] ++, cnt[3] += 2, cnt[2] ++;
}
for(int i = 9; i >= 2; i -- ){
for(int j = 1; j <= cnt[i]; j ++ ){
cout << i;
}
}
return 0;
}
这里空空如也
有帮助,赞一个