首页 > 更多知识 发布时间:2023-06-24 15:52:13

软考广东卷2023上半年第44题


题目描述:

某公司有 $n$ 名员工,每个员工有一个唯一的编号 $id$ 和一个工资 $salary$。现在需要对员工按照工资从高到低排序,如果工资相同,则按照编号从小到大排序。请你编写一个程序,实现这个排序功能。

输入格式:

第一行包含一个整数 $n$,表示员工数量。

接下来 $n$ 行,每行包含一个字符串 $id$ 和一个整数 $salary$,表示一个员工的编号和工资。

输出格式:

按照要求排序后,输出每个员工的编号和工资,每个员工占一行。

数据范围:

$1 \\leq n \\leq 10^5$,$0 \\leq salary \\leq 10^9$,$id$ 由不超过 8 个英文字母组成。

输入样例:

```
3
b 100
a 100
c 50
```

输出样例:

```
a 100
b 100
c 50
```

算法1

(排序) $O(nlogn)$

时间复杂度

参考文献

python3 代码

C++ 代码

算法2

(暴力枚举) $O(n^2)$

blablabla

时间复杂度

参考文献

C++ 代码

算法1

(排序) $O(nlogn)$

先按照工资从高到低排序,如果工资相同,则按照编号从小到大排序。

时间复杂度

参考文献

python3 代码

```python
n = int(input())
data = []
for i in range(n):
id, salary = input().split()
data.append((id, int(salary)))
data.sort(key=lambda x: (-x, x[0]))
for id, salary in data:
print(id, salary)
```

C++ 代码

```cpp
#include
#include
#include

using namespace std;

int main()
{
int n;
cin >> n;
vector> data(n);
for (int i = 0; i < n; i++)
{
cin >> data[i].first >> data[i].second;
}
sort(data.begin(), data.end(), [](const pair& a, const pair& b) {
if (a.second != b.second)
{
return a.second > b.second;
}
return a.first < b.first;
});
for (auto& d : data)
{
cout << d.first << \