给出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;
}