CCF认证201909-4推荐系统
Posted lw99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF认证201909-4推荐系统相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <list> #include <set> #include <vector> using namespace std; int m, n; int opask = 0; class node { public: int idm; long long id; long long score; node(int c, int a, int b) :idm(c), id(a), score(b) {} }; class cmp { public: bool operator()(node a, node b) { if (a.score == b.score) { if (a.idm == b.idm) { return a.id < b.id; } return a.idm < b.idm; } return a.score > b.score; } }; int main() { cin >> m >> n; set<node,cmp> li; set <int> del[55]; //set<int> st[5005]; vector<int> st[5005]; for (int i = 0; i < n; i++) { int id, score; cin >> id >> score; for (int j = 0; j < m; j++) li.insert(node(j, id, score)); } int opnum; cin >> opnum; for (int i = 0; i < opnum; i++) { int flag; cin >> flag; if (flag == 1) { int type, commodityid, score; cin >> type >> commodityid >> score; li.insert(node(type, commodityid, score)); } else if (flag == 2) { int type, commodityid; cin >> type >> commodityid; del[type].insert(commodityid); } else if (flag == 3) { int k[55]; for (int i = 0; i <= m; i++) cin >> k[i]; int sum = 0; int max[55] = { 0 }; for (auto i : li) { if (max[i.idm] < k[i.idm + 1] && sum < k[0] && del[i.idm].find(i.id) == del[i.idm].end()) { //st[opask*m + i.idm].insert(i.id); st[opask*m + i.idm].push_back(i.id); sum++; max[i.idm]++; } if (sum >= k[0]) break; } opask++; } } for (int i = 0; i < opask*m; i++) { if (st[i].empty()) cout << "-1" << endl; else { for (auto it : st[i]) cout << it << " "; cout << endl; } } return 0; }
起先用链表来存取商品信息,提交后发现时间超了,应该是查询商品时太慢,所以采用set来存取商品信息来提交,但提交后发现只得60分,原因如其他博客所说,应该是后台的数据有问题
,所以输出时不用对他的商品id进行排序就可,刚开始我是把信息存到set里直接就是排好序的,后来就直接有vector来存取,就可以了,注释的就是排序的结果,
以上是关于CCF认证201909-4推荐系统的主要内容,如果未能解决你的问题,请参考以下文章