官方题解
2026-02-23 00:35:19
发布于:江苏
23阅读
0回复
0点赞
题目大意
将给出的 进行重新排列,然后分离成两个不带前导零的正整数,求分离得到的两个数的乘积的最大值。
解题思路
考虑 或二进制枚举将所有分离情况全都找出来,并且判断分离是否合法,然后记录最大值即可。
参考代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 3010;
bool rcmp(int a,int b){return a>b;}
int main(){
string s;cin>>s;
sort(s.begin(),s.end(),rcmp);
int n=s.size();
ll ans=0;
for(ll S=0;S<(1ll<<n);S++){
string a,b;
for(int i=0;i<n;i++){
if(S>>i&1) a+=s[i];
else b+=s[i];
}
if(a.size()==0 || a[0]=='0') continue;
if(b.size()==0 || b[0]=='0') continue;
ll x=stoll(a),y=stoll(b);
ans=max(ans,x*y);
}
cout<<ans<<endl;
return 0;
}
这里空空如也







有帮助,赞一个