问题描述
二进制王国是一个非常特殊的国家,因为该国家的居民仅由 00 和 11 组成。
在这个国家中,每个家庭都可以用一个由 00 和 11 组成的字符串 SS 来表示,例如 101101、000000、111111 等。
现在,国王选了出N户家庭参加邻国的庆典。为了符合王国的审美标准,我们需要选择一种排队顺序,使得最终形成的队伍在字典序上是最小的。
国王将这个任务交给了你,请你解决这个问题。
输入格式
第一行包含一个整数 N(1 ≤N≤2×105)N(1 ≤N≤2×105),代表二进制家庭数量。
接下来输入 N 行,第 i 行输入一个二进制字符串 Si 表示第 i 户家庭。
数据范围保证:∑i=1n∣Si∣≤2×105∑i=1n∣Si∣≤2×105,其中 Si∣ 表示第 i 个字符串的长度。
输出格式
输出一行一个字符串,表示字典序最小的排队情况。
输入样例
3
111
000
101
输出样例
000101111
算法
思路:要注意的是拼接后的字符串字典顺序最小,所以比较的是拼接后的字符串,这里存储用vector动态数组
#include <iostream>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int Cmp(string a1,string a2){
return a1+a2<a2+a1;
}
int main()
{
// 请在此输入您的代码
cin>>n;
vector<string> a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a.begin(),a.end(),Cmp);
for(int j=0;j<n;j++)
cout<<a[j];
return 0;
}