小苯送礼物
[题目链接](https://www.nowcoder.com/practice/466e02d2177845589ab5fa5decc2857f)
思路
本题是一道排序模拟题。给定 名粉丝的点赞数和收藏数,需要选出支持力度最大的前
名粉丝。
计算支持力度
每名粉丝的支持力度 。
排序规则
题目给出了三级排序标准:
- 支持力度越大越优先;
- 支持力度相同时,收藏数越多越优先;
- 以上都相同时,编号越小越优先(关注时间更早)。
实现步骤
- 读入每名粉丝的点赞数
和收藏数
,计算其支持力度
,并记录编号;
- 按上述三级规则对所有粉丝进行排序;
- 取排序后前
名粉丝的编号,再按编号升序输出。
样例演示
4 名粉丝的支持力度分别为:
| 粉丝编号 | 点赞 | 收藏 | 支持力度 |
|---|---|---|---|
| 1 | 1 | 2 | |
| 2 | 2 | 1 | |
| 3 | 3 | 0 | |
| 4 | 1 | 3 |
选前 名:粉丝 4(力度 7)和粉丝 1(力度 5)。按编号升序输出:
1 4。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, k;
scanf("%d%d", &n, &k);
vector<array<int,3>> fans(n); // {支持力度, 收藏数, 编号}
for(int i = 0; i < n; i++){
int x, y;
scanf("%d%d", &x, &y);
fans[i] = {x + 2 * y, y, i + 1};
}
sort(fans.begin(), fans.end(), [](const auto& a, const auto& b){
if(a[0] != b[0]) return a[0] > b[0];
if(a[1] != b[1]) return a[1] > b[1];
return a[2] < b[2];
});
vector<int> res;
for(int i = 0; i < k; i++) res.push_back(fans[i][2]);
sort(res.begin(), res.end());
for(int i = 0; i < k; i++){
if(i) printf(" ");
printf("%d", res[i]);
}
printf("\n");
return 0;
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[][] fans = new int[n][3]; // 支持力度, 收藏数, 编号
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
fans[i][0] = x + 2 * y;
fans[i][1] = y;
fans[i][2] = i + 1;
}
Arrays.sort(fans, (a, b) -> {
if (a[0] != b[0]) return b[0] - a[0];
if (a[1] != b[1]) return b[1] - a[1];
return a[2] - b[2];
});
int[] res = new int[k];
for (int i = 0; i < k; i++) res[i] = fans[i][2];
Arrays.sort(res);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < k; i++) {
if (i > 0) sb.append(' ');
sb.append(res[i]);
}
System.out.println(sb);
}
}
复杂度分析
- 时间复杂度:
,排序为主要开销。
- 空间复杂度:
,存储所有粉丝的信息。

京公网安备 11010502036488号