AcWing 1622. 推荐系统
原题链接
简单
作者:
巨鹿噜噜噜路
,
2020-06-02 17:56:12
,
所有人可见
,
阅读 813
C++ 代码
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
unordered_map<int, int> freq;
bool cmp(const int& a, const int& b) {
if (freq[a] != freq[b]) return freq[a] > freq[b];
else return a < b;
}
int n, k, id;
vector<int> rec;
unordered_map<int, bool> isExist;
int main() {
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%d", &id);
if (i) {
printf("%d:", id);
for (int j = 0; j < rec.size() && j < k; j++) {
printf(" %d", rec[j]);
}
printf("\n");
}
//维护 k + 1 大小的数组
if(isExist[id] == false) {
isExist[id] = true;
if (rec.size() > k) {
isExist[rec[k]] = false;
rec[k] = id;
}
else rec.push_back(id);
}
freq[id]++; //更新次数
sort(rec.begin(), rec.end(), cmp); //按照次数排序
}
return 0;
}