Untitled
unknown
plain_text
2 years ago
2.6 kB
6
Indexable
#include<set> //#include<iostream> using namespace std; struct news{ int score; int section; } news[50005]; struct Compare { bool operator() (int x, int y) { if (news[x].score != news[y].score) return news[x].score > news[y].score;// return bai bao co diem cao hon return x > y;//return bai bao co diem bang nhau va co id cao hon } }; int user_fav[100001]; set<int, Compare> section[10]; void init() { for (int i = 0; i < 10; i++) section[i].clear(); for(int i = 0; i < 100001; i++) user_fav[i] = -1; } void addNews(int mSection, int mNewsId) { news[mNewsId].score = 0; news[mNewsId].section = mSection; section[mSection].insert(mNewsId); } void eraseNews(int mNewsId) { section[news[mNewsId].section].erase(mNewsId); } void readNews(int mUserId, int mNewsId) {// neu đổi thẳng ở trong thi nó ko tự động sắp xếp lại -> sai section[news[mNewsId].section].erase(mNewsId);//thu vien set, bo bai bao ra khoi section news[mNewsId].score++;// tang diem bai bao user_fav[mUserId] = news[mNewsId].section;//cap nhap section theo userID,moi userID chi quan tam section moi nhat section[news[mNewsId].section].insert(mNewsId);// them vao section } void changeSection(int mNewsId, int mSection)// bai bao doi section { section[news[mNewsId].section].erase(mNewsId); news[mNewsId].section = mSection; section[mSection].insert(mNewsId); } int getList(int mUserId, int mList[]) { set<int, Compare> ::iterator it[10]; for (int i = 0; i < 10; i++) { it[i] = section[i].begin(); } int cnt = 0; while (cnt < 10) {//lay 10 gia tri int id = -1; int max_score = -1; int next = -1; for (int i = 0; i < 10; i++) {// so sanh 10 gia tri dau tien tung section if (it[i] == section[i].end()) continue;//section het bao int temp = news[*it[i]].score;//bien so sanh //int mid = *it[i];// con tro cua bien if (news[*it[i]].section == user_fav[mUserId]) temp += 10;// dung section +10 if (temp > max_score || (temp == max_score && *it[i] > id)) { max_score = temp;//update bien id = *it[i]; next = i; } } if (max_score == -1) break; mList[cnt] = id;//them bai bao diem cao nhat it[next]++;// neu section co bai bao được chọn rồi thì phải nhảy qua bài của section đ cnt++;// tang bien den 10 } return cnt; }
Editor is loading...