代码解决部分:
//整数排序(贪心算法)
#include<bits/stdc++.h>
using namespace std;
#define lli int
bool cmp(string x,string y)
{
string s1=x+y;
string s2=y+x;
return s1>s2;
}
int main()
{
int n;cin>>n;
vector<string> arr(n);
string ans;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
arr[i]=to_string(num);
}
sort(arr.begin(),arr.end(),cmp);
for(int i=0;i<n;i++)
{
ans+=arr[i];
}
cout<<ans;
system("pause");
return 0;
}
//to_string调用多次,卡常数
解释:to_string会在排序时调用多次,卡常数复杂度。
tle代码:
//整数排序(贪心算法)
#include<bits/stdc++.h>
using namespace std;
#define lli long long int
bool cmp(lli x,lli y)
{
string s1=to_string(x)+to_string(y);
string s2=to_string(y)+to_string(x);
return s1>s2;
}
int main()
{
int n;cin>>n;
vector<lli> arr(n);
string ans;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
sort(arr.begin(),arr.end(),cmp);
for(int i=0;i<n;i++)
{
ans+=to_string(arr[i]);
}
cout<<ans;
return 0;
}