Recommendation system predicts the preference that a user would give to an item. Now you are asked to program a very simple recommendation system that rates the user's preference by the number of times that an item has been accessed by this user.

Input Specification:

Each input file contains one test case. For each test case, the first line contains two positive integers: N (<= 50000), the total number of queries, and K (<= 10), the maximum number of recommendations the system must show to the user. Then given in the second line are the indices of items that the user is accessing -- for the sake of simplicity, all the items are indexed from 1 to N. All the numbers in a line are separated by a space.

Output Specification:

For each case, process the queries one by one. Output the recommendations for each query in a line in the format:

query: rec[1] rec[2] ... rec[K]

where query is the item that the user is accessing, and rec[i] (i = 1, ... K) is the i-th item that the system recommends to the user. The first K items that have been accessed most frequently are supposed to be recommended in non-increasing order of their frequencies. If there is a tie, the items will be ordered by their indices in increasing order.

Note: there is no output for the first item since it is impossible to give any recommendation at the time. It is guaranteed to have the output for at least one query.

Sample Input:

12 3
3 5 7 5 5 3 2 1 8 3 8 12

Sample Output:

5: 3
7: 3 5
5: 3 5 7
5: 5 3 7
3: 5 3 7
2: 5 3 7
1: 5 3 2
8: 5 3 1
3: 5 3 1
8: 3 5 1
12: 3 5 8

优先队列。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int n,k,d,c;
int rec[];
int times[];///记录出现次数
struct item
{
int x,c;
item (int x,int c)
{
this -> x = x;
this -> c = c;
}
friend bool operator < (item a,item b)
{
if(a.c == b.c)return a.x > b.x;
return a.c < b.c;
}
};
int main()
{
cin>>n>>k;
priority_queue<item> q;
for(int i = ;i < n;i ++)
{
cin>>d;
times[d] ++;
c = ;
while(!q.empty() && c < k)
{
rec[c ++] = q.top().x;
q.pop();
}
while(!q.empty())q.pop();
if(c)
{
cout<<d<<':';
for(int i = ;i < c;i ++)
{
cout<<' '<<rec[i];
if(rec[i] != d)q.push(item(rec[i],times[rec[i]]));
}
cout<<endl;
}
q.push(item(d,times[d]));
}
}

最新文章

  1. 第23章 java线程通信——生产者/消费者模型案例
  2. 《JavaScript DOM编程艺术》读后总结
  3. php 和mysql httpd 简单网页的搭建
  4. REHL5.5 linux的postfix的邮件服务器配置 (笔记)
  5. Atmospheric Scattering in Unity5
  6. 第1章 Lua基础
  7. Oracle中打印99乘法表的13种方法
  8. Codeforces Codeforces Round #484 (Div. 2) D. Shark
  9. 读《31天学会CRM项目开发》记录1 - 认识软件开发
  10. LCA(Lowest Common Ancesor)
  11. Android 爬坑之路
  12. centos删除用户出错userdel: user xxx is currently used by process 23750
  13. apache 多并发测试
  14. 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)
  15. jdbc获取blob类型乱码
  16. POJ 3685 Matrix 二分 函数单调性 难度:2
  17. git 设置bitbucket 邮箱、用户
  18. feginclient demo
  19. ASP.NET 异步Web API + jQuery Ajax 文件上传代码小析
  20. 牛客练习赛9 B - 珂朵莉的值域连续段

热门文章

  1. 分享页(把末尾的JS函数换成这个)
  2. pycharm2019连接mysql错误08801 ------Connection to django1@localhost failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
  3. 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)
  4. STOMP协议详解
  5. 网络协议之FTP协议
  6. 【C++进阶:atoi()与itoa()】
  7. 7、Shiro加密和加盐
  8. 【mysql】一对一关系的理解,以及Navicat Premium怎么设置字段的唯一性(UNIQUE)?
  9. 使用C#分层查询多个表数据
  10. 2018.03.26 Python-Pandas 字符串常用方法