1129 Recommendation System(重载set的operator<()函数)
发布完上一篇文章之后再网上发现了更简单的做法,重载set里的operator<()函数以实现自定义顺序的集合,每次输出集合里面的前K个数值就行;题目就不重复搬了,直接上代码:
#include <iostream>
#include<unordered_map>
#include<set>
using namespace std;
struct node {
int value, time = 0;
bool operator <(const node &a) const {
return time != a.time ? time > a.time : value < a.value;
}
};
unordered_map<int, node> mp;
set<node> rec;
int main()
{
int N, K, pre;
scanf("%d%d%d", &N, &K, &pre);
for (int i = 2; i <= N; i++) {
int vertex,j=1;
scanf("%d", &vertex);
mp[pre].value = pre;
mp[pre].time++;
auto tmp = rec.find({ pre,mp[pre].time - 1 });
if (tmp != rec.end()) rec.erase(tmp);
rec.insert({ pre,mp[pre].time });
printf("%d:", vertex);
for (auto it = rec.begin(); it != rec.end() && j <= K; it++, j++)
printf(" %d", it->value);
printf("\n");
pre = vertex;
}
return 0;
}