[ファイト]数NOIP
タイトル説明
有するnは正の整数(n≤20)、それらは整数の最大数を形成するように一列に連結されています。
例えば:34331213:n = 3の場合、3は整数整数13312343最大に結合されています
別の例:7424613:n = 4の場合、4は整数整数7,13,4,246最大に結合されています
入力形式
最初の行、正の整数n。
二行目、nは正の整数。
出力フォーマット
最大の整数を表す正の整数
サンプル入力と出力
入力#1の複製
。3
13 312 343で
出力#1複製
34331213
分析
私は大丈夫、それを注文して、直接書くこととは思いませんでしたが、比較関数CMPはまた、直接の比率です。。
bool cmp(string a,string b) {
return a>b;
}
私が間違った番号を提出しました。。。アクリジン感じの権利。。。。。。。。。。。
ここで、元のピット(問題のおかげ首長ソリューションは、問題に対する解決策が本当に時々大物ませんが上に行くことはできません。)
bool cmp(string a,string b) {
return a+b>b+a;//自定义排序函数,这一步非常巧妙,
//假设a=321,b=32;a+b=32132,b+a=32321这样下面sort排下来就是32>321
//避免出现32132>32321的情况
}
/*如果这样写:
bool cmp(string a,string b){
return a>b;
会发生321>32的情况,具体原因是字符串自己的关系运算是这样设定的
}*/
それぞれの質問の後自身がもっとしようとする直角に回答しなければなりません。。この問題はやってよりも重要です。。
コード
#include<iostream>
#include<algorithm>
using namespace std;
string s[22];
int n;
bool cmp(string a,string b) {
return a+b>b+a;//自定义排序函数,这一步非常巧妙,
//假设a=321,b=32;a+b=32132,b+a=32321这样下面sort排下来就是32>321
//避免出现32132>32321的情况
}
/*如果这样写:
bool cmp(string a,string b){
return a>b;
会发生321>32的情况,具体原因是字符串自己的关系运算是这样设定的
}*/
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++){
cout<<s[i];
}
return 0;
}