PAT 1129 Recommendation System (25 分) SET 运算符重载

阅读 65

2022-02-18

#include <iostream>
#include <set>
using namespace std;
struct node{
    int val,cnt;
    bool operator<(const node&a)const{
        return(cnt!=a.cnt)?cnt>a.cnt:val<a.val;
    }
};
int book[50001];
int main() {
    int n,k,num;
    cin>>n>>k;
    set<node>s;
    for(int i=0;i<n;i++){
        cin>>num;
        if(i!=0){
            printf("%d:",num);
            int tempCnt=0;
            for(auto it=s.begin();tempCnt<k&&it!=s.end();it++){
                printf(" %d",it->val);
                tempCnt++;
            }
            printf("\n");
        }
        auto it=s.find(node{num,book[num]});               //num的次数++
        if(it!=s.end()) s.erase(it);                    //如果set里有记录num,则擦除后++再重新插入
        book[num]++;
        s.insert(node{num,book[num]});
    }
    return 0;
}

精彩评论(0)

0 0 举报