1 条题解
-
2
题目分析
我们知道,如果一个数要尽量大,需要满足这两个条件:
- 优先选择更长的数字
- 其次,选择首位更大的数
于是,我们就可以得出这样一个比较函数:
bool cmp(ll x,ll y) { if (digits(x)!=digits(y)) return digits(x)>digits(y); else return x>y; }
我们通过这个函数找到最优的四个数后,通过
next_permutation()
枚举出最优解。AC 代码
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[200100]; ll digits(ll x) { return log10(x); } bool cmp(ll x,ll y) { if (digits(x)!=digits(y)) return digits(x)>digits(y); else return x>y; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1,cmp); ll ans=0; sort(a+1,a+4); do { string s=""; for (int i=1;i<=3;i++) s+=to_string(a[i]); ll t=stoll(s); ans=max(ans,t); } while (next_permutation(a+1,a+4)); cout<<ans; return 0; }
信息
- ID
- 386
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 11
- 已通过
- 7
- 上传者