题目

给出N个查询,以及K(表示推荐系统最多给用户推荐K个商品)。输入每个查询时,系统推荐给用户最多K个商品。这K个商品根据此前它被搜索的次数按降序排列,若被搜索的次数一致,则按其编号增序排列(注意,输入第一个查询时,系统不会有推荐,都没有用户查过,何来推荐呢?)(注:商品的编号[1~N])

tip:set + 去重

#include<iostream>
#include<set>
using namespace std;
struct ss {
	int a,b;
	bool operator < (const struct ss s) const {
		if(s.b==b)//定义排序方式 
			return s.a>a;
		return s.b<b;
	}
};
int main() {
	int n,m;
	cin>>n>>m;
	int count[n+1]= {0};
	int t;
	set<struct ss> ans;
	cin>>t;
	ans.insert({t,++count[t]});
	for(int i=1; i<n; ++i) {
		cin>>t;
		cout<<t<<":";
		int sum=0;
		for(auto it : ans) {
			sum++;
			cout<<" "<<it.a;
			if(sum==m)
				break;
		}
		cout<<endl;
		while(ans.find({t,count[t]})!=ans.end())//去掉之前的记录 
			ans.erase({t,count[t]});
		ans.insert({t,++count[t]});
	}
	return 0;
}