他有
名粉丝,编号从
到
,但他只能选择其中
名送礼物,他决定选择其中对他支持力度最大的前
名粉丝。
(如果两名支持力度相同,则优先选择收藏数更多的,如果都一样,则优先选择编号更小的(因为这意味着他关注小苯的时间更早))
具体的:每名粉丝如果每给小苯点一次赞,则他对小苯就增加了
现在小苯想知道,他应该选择哪
输入包含行。
第一行两个正整数,分别表示对小苯有过支持的粉丝个数,以及小苯选择送礼的粉丝个数。
接下来行,每行两个整数
,表示第
位粉丝给小苯点过
次赞,收藏过
个小苯的文章。
输出包含一行个正整数,表示小苯选择出送礼物的粉丝们的编号。(按照升序输出)
4 2 1 2 2 1 3 0 1 3
1 4
import java.util.*;
public class Main {
static class Fan {
int support; // 支持力度 = 点赞数 + 2*收藏数
int collect; // 收藏数,用于支持力度相同时的排序
int id; // 粉丝编号
Fan(int support, int collect, int id) {
this.support = support;
this.collect = collect;
this.id = id;
}
}
public static void main(String[] args) {
// 使用Scanner接收输入
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
Fan[] fans = new Fan[n];
for (int i = 0; i < n; i++) {
int x = scanner.nextInt(); // 点赞数
int y = scanner.nextInt(); // 收藏数
// 计算支持力度并存储粉丝信息
fans[i] = new Fan(x + 2 * y, y, i + 1);
}
// 自定义排序规则
Arrays.sort(fans, (a, b) -> {
// 首先按支持力度降序排列
if (a.support != b.support) {
return Integer.compare(b.support, a.support);
}
// 支持力度相同则按收藏数降序排列
if (a.collect != b.collect) {
return Integer.compare(b.collect, a.collect);
}
// 前两者都相同则按编号升序排列
return Integer.compare(a.id, b.id);
});
// 提取前k名粉丝的编号
int[] result = new int[k];
for (int i = 0; i < k; i++) {
result[i] = fans[i].id;
}
// 按编号升序排序结果
Arrays.sort(result);
// 输出结果
StringBuilder sb = new StringBuilder();
for (int i = 0; i < k; i++) {
sb.append(result[i]);
if (i < k - 1) {
sb.append(" ");
}
}
System.out.println(sb.toString());
// 关闭Scanner
scanner.close();
}
}
主要学习sort自定义函数的写法以及pair对的用法
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,k;
cin>>n>>k;
vector<pair<int,pair<int,int>>> v;
for (int i=1; i<=n; i++) {
int d,s;
cin>>d>>s;
int z=d+s*2;
v.push_back({i,{z,s}});
}
sort(v.begin(),v.end(),[](const auto& a,const auto& b){
if(a.second.first==b.second.first) {
if(a.second.second==b.second.second){
return a.first<b.first;
}else {
return a.second.second>b.second.second;
}
}else {
return a.second.first>b.second.first;
}
});
vector<int> p(k);
for (int i=0;i<k ; i++) {
p[i]=v[i].first;
}
sort(p.begin(),p.end());
for (int i=0; i<k; i++) {
cout<<p[i]<<" ";
}
cout<<endl;
}
#include
#include
#include
using namespace std;
struct fans {
int id; //粉丝序号
int like; //点赞数
int cang; //收藏数
int point; //支持力度
};
bool compare(fans f1, fans f2)
{
if ((f1.point == f2.point) && (f1.cang == f2.cang)&&(f1.like==f2.like))
return f1.id < f2.id;
if ((f1.point == f2.point) && (f1.cang == f2.cang))
return f1.like > f2.like;
if (f1.point == f2.point)
return f1.cang > f2.cang;
return f1.point > f2.point;
}
int main() {
int n, k;
while (cin >> n >> k) { // 注意 while 处理多个 case
vector v;
fans ftmp;
int x, y;
for (int i = 0; i < n; ++i)
{
cin >> x >> y;
ftmp.id = i + 1;
ftmp.like = x;
ftmp.cang = y;
ftmp.point = x + 2 * y;
v.push_back(ftmp);
}
sort(v.begin(),v.end(),compare);
sort(v.begin(), v.begin() + k, [](fans a, fans b) {return a.id < b.id; });
for (int i = 0; i < k; ++i)
{
cout << v[i].id << " ";
}
cout << endl;
}
}
// 64 位输出请用 printf("%lld")
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int fansNum = in.nextInt();
int goodsNum = in.nextInt();
List<UpInfo> list = new ArrayList<>();
for (int i = 0; i < fansNum; i++) {
int like = in.nextInt();
int have = in.nextInt();
list.add(new UpInfo(i + 1, like, have, like + 2 * have));
}
Collections.sort(list, new Comparator<UpInfo>() {
public int compare(UpInfo fanA, UpInfo fanB) {
if (fanA.up != fanB.up) {
return fanB.up - fanA.up;
} else {
if (fanA.haveNum != fanB.haveNum) {
return fanB.haveNum - fanA.haveNum;
} else {
return fanA.id - fanB.id;
}
}
}
});
List<Integer> res = new ArrayList<>();
for (int i = 0; i < goodsNum; i++) {
res.add(list.get(i).id);
}
Collections.sort(res);
for (int num : res) System.out.print(num + " ");
}
}
}
class UpInfo {
public int id;
public int likeNum;
public int haveNum;
public int up;
public UpInfo(int id, int likeNum, int haveNum, int up) {
this.id = id;
this.likeNum = likeNum;
this.haveNum = haveNum;
this.up = up;
}
} n, k = map(int, input().split())
fans = []
for i in range(1, n + 1):
dz, sc = map(int, input().split())
support = dz + sc * 2
fans.append((support, sc, i))
fans.sort(key=lambda x: (-x[0], -x[1], x[2]))
selected = [fans[i][2] for i in range(k)]
selected.sort()
print(' '.join(map(str, selected))) n, k = map(int, input().split())
lis1 = []
for i in range(n):
a, b = map(int, input().split())
lis1.append([i+1, a + 2*b])
# 先按支持力度降序,取前k个,再按编号升序
lis1 = sorted(lis1, key=lambda x: -x[1])
lis2 = sorted(lis1[:k], key=lambda x: x[0])
print(' '.join(str(j) for j, val in lis2))
有一组用例过不了,不知道为啥
import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] line1 = bf.readLine().split(" ");
int n = Integer.parseInt(line1[0]), k = Integer.parseInt(line1[1]);
ArrayList<Fan> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
String[] line = bf.readLine().split(" ");
list.add(new Fan(i, Integer.parseInt(line[0]), Integer.parseInt(line[1])));
}
list.sort(new Comparator<Fan>() {
@Override
public int compare(Fan o1, Fan o2) {
int i = o2.score - o1.score;
i = i == 0 ? o2.col - o1.col : i;
i = i == 0 ? o1.id - o2.id : i;
return i;
}
});
int[] ids = new int[k];
for (int i = 0; i < k; i++) {
ids[i] = list.get(i).id;
}
Arrays.sort(ids);
System.out.println(Arrays.stream(ids).boxed().map(String::valueOf).collect(Collectors.joining(" ")));
}
}
class Fan {
int id;
int zan;//点赞数
int col;//收藏数
int score;
public Fan(int id, int zan, int col) {
this.id = id;
this.zan = zan;
this.col = col;
this.score = zan * 1 + col * 2;
}
} #include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
int id;
int like;
int collect;
int support;
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,k,x,y;
cin>>n>>k;
vector<node> vec(n);
for(int i=0;i<n;i++){
cin>>vec[i].like>>vec[i].collect;
vec[i].id=i+1;
vec[i].support=vec[i].like+2*vec[i].collect;
}
sort(vec.begin(),vec.end(),[](auto const& x,auto const&y){
if(x.support==y.support&&x.collect==y.collect&&x.like==y.like)
return x.id<y.id;
if(x.support==y.support&&x.collect==y.collect)
return x.like>y.like;
if(x.support==y.support)
return x.collect>y.collect;
return x.support>y.support;
});
sort(vec.begin(),vec.begin()+k,[](auto const& x,auto const&y){return x.id<y.id;});
for(int i=0;i<k;i++)
cout<<vec[i].id<<' ';
} n,k = map(int,input().split())
numbers_list = []
for i in range(1,n + 1):
sub_list = list(map(int,input().split()))
sub_list.append(i)
sub_list.append(sub_list[0]+2*sub_list[1])
numbers_list.append(sub_list)
sort_list = sorted(numbers_list,key=lambda x:[-x[3],-x[1],x[2]])
sub_l = []
for i in range(k):
sub_l.append(sort_list[i][2])
sort_l = sorted(sub_l)
sort_l = [str(i) for i in sort_l]
print(" ".join(sort_l)) import sys from collections import defaultdict n,m = map(int,input().split()) ans = [] for i in range(n): p,q=map(int,input().split()) flag = p+2*q ans.append((-flag,-q,i)) ans.sort() sel = [i[2]+1 for i in ans[:m]] sel.sort() for i in sel: print(str(i),end = ' ')