题目描述
分析:用户购买一件商品,就向他推荐K个商品。
定义一个结构体goods,包含商品的编号、购买次数,并按排序要求重载小于运算符。定义一个set,对购买过的商品进行自动排序。
#include<set>
#include<iostream>
using namespace std;
struct goods{
int index;
int num=0;
goods(int i,int n):index(i),num(n){}
bool operator <(const goods& g)const{
if(this->num!=g.num){
return this->num>g.num;
}
else{
return this->index<g.index;
}
}
};
int m[50005];
set<goods> s;
int main(){
int N,K,x;
cin>>N>>K>>x;
s.insert(goods(x,1));
m[x]++;
for(int i=2;i<=N;i++){
cin>>x;
cout<<x<<": ";
int k=0;
for(auto i=s.begin();i!=s.end()&&k<K;i++){
if(i==s.begin()){
cout<<i->index;
}
else{
cout<<" "<<i->index;
}
k++;
}
cout<<endl;
if(s.find(goods(x,m[x]))!=s.end()){
s.erase(goods(x,m[x]));
}
s.insert(goods(x,++m[x]));
}
return 0;
}