贪心问题
坑点如下
1,注意string的灵活运用
bool cmp(string a,string b)
{ return a+b<b+a;}
string str[maxn];
2,两个字符串组成的数字取最小值的方法,注意证明步骤
代码如下
bool cmp(string a,string b)
{ return a+b<b+a;}
3,开始用cout>>0有一个显示超时,换成printf后成功通过
整体代码如下
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const int maxn=10010;
bool cmp(string a,string b)
{ return a+b<b+a;
}
string str[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{ cin>>str[i]; }
sort(str,str+n,cmp);
string ans;
for(int i=0;i<n;i++)
{
ans+=str[i];
}
while(ans.size()!=0&&ans[0]=='0')
{ans.erase(ans.begin());}
if(ans.size()==0) printf("0");
else
{
cout<<ans;
return 0;
}
}
`