题目地址:
https://www.acwing.com/problem/content/864/
给定 N N N个三元组 ( x , y , z ) (x,y,z) (x,y,z),其中 x x x是整数, y y y是浮点数, z z z是字符串。请你按照 x x x从小到大的顺序将这些三元组打印出来。数据保证不同三元组的 x x x值互不相同。
输入格式:
第一行包含整数
N
N
N。接下来
N
N
N行,每行包含一个整数
x
x
x,一个浮点数
y
y
y,一个字符串
z
z
z,表示一个三元组,三者之间用空格隔开。
输出格式:
共
N
N
N行,按照
x
x
x从小到大的顺序,每行输出一个三元组。注意,所有输入和输出的浮点数
y
y
y均保留两位小数。
数据范围:
1
≤
N
≤
10000
1≤N≤10000
1≤N≤10000
1
≤
x
,
y
≤
1
0
5
1≤x,y≤10^5
1≤x,y≤105
字符串总长度不超过
1
0
5
10^5
105。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10010;
int n;
struct st {
int x;
double y;
string z;
bool operator<(const st& e) {
if (x != e.x) return x < e.x;
else if (y != e.y) return y < e.y;
else return z < e.z;
}
} a[N];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x;
double y;
string z;
cin >> x >> y >> z;
a[i] = {x, y, z};
}
sort(a, a + n);
for (int i = 0; i < n; i++) {
auto e = a[i];
printf("%d %.2lf %s\n", e.x, e.y, e.z.c_str());
}
return 0;
}
时间复杂度 O ( N log N ) O(N\log N) O(NlogN),空间 O ( 1 ) O(1) O(1)。