1129 Recommendation System (25 point(s))(排序:依据多种标准进行排序)

本文介绍了如何使用C++通过`sort`函数结合自定义比较函数,解决比赛排名问题。首先按参赛者次数排序,其次根据索引次序,当次数相同时,按索引从小到大排列。代码展示了如何创建计数数组、标记已访问项,并在每轮更新后调整排名列表。
摘要由CSDN通过智能技术生成

题目链接

思路

按次数和索引来排序
次数是第一标尺
索引是第二标尺
通过sort(begin,end,cmp)的第三个参数
来说明如何排序

代码

using namespace std;
#include <iostream>
#include<vector>
#include<algorithm>
vector<int>ranks;
int cnt[50010];
bool visited[50010];
int n, k,temp;
bool cmp(int a, int b) {
	if (cnt[a] == cnt[b])return a < b;
	else return cnt[a] > cnt[b];
}
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		cin >> temp;
		if (i != 0) {
			cout << temp << ":";
			for (auto i : ranks)cout << " " << i;
			cout << endl;
		}
		cnt[temp]++;
		if (!visited[temp]) {
			ranks.push_back(temp);
			visited[temp] = true;
		}
		sort(ranks.begin(), ranks.end(), cmp);
		if (ranks.size() > k) {
			visited[ranks[ranks.size() - 1]] = false;
			ranks.pop_back();
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值