问题描述
二进制王国是一个非常特殊的国家,因为该国家的居民仅由 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 个字符串的长度。
输出格式
输出一行一个字符串,表示字典序最小的排队情况。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> v;
int n;
bool cmp(string s1,string s2)
{
return s1+s2<s2+s1;
}
//必须自定义排序,不然不正确,比如10、100,举反例
int main()
{
cin>>n;
for(int i = 0;i<n;i++)
{
string str;
cin>>str;
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
for(auto item:v)
{
cout<<item;
}
return 0;
}
这个5我看 s[i] <= 2*10的5次方就麻爪了😭
长度