洛谷P1012 拼数 string
又是大水题...
这一题过水,令人无法接受。。。。。。
但是如果我们不知道string的一个神奇的性质的话,就会很难受。
我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 string b 时,就不好处。于是我跑去看题解,发现大佬们的神奇做法:
a + b > b + a
666啊!
下面讲解关于string的 + 和 < 运算符:
+ : 把两个字符串拼起来。
< : 字典序比较。
这两组数据可以卡掉a > b
37 3
30 3
然后我们就水 啊 水 啊 水 过 了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 const int N = 21; 6 bool cmp(string a, string b) { 7 return a + b > b + a; 8 } 9 10 int main() { 11 string a[N]; 12 int n; 13 scanf("%d", &n); 14 for(int i = 1; i <= n; i++) { 15 cin >> a[i]; 16 } 17 sort(a + 1, a + n + 1, cmp); 18 for(int i = 1; i <= n; i++) { 19 cout << a[i]; 20 } 21 return 0; 22 }