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<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
typedef struct NODE{
int id;
int cnt;
}info;
bool operator <(const info &a, const info &b){
if(a.cnt == b.cnt)
return a.id < b.id;
else return a.cnt > b.cnt;
}
set<info> st;
int hashTB[] = {};
int main(){
int N, K, qu;
scanf("%d%d%d", &N, &K, &qu);
info temp = {qu, };
st.insert(temp);
hashTB[qu]++;
for(int i = ; i < N; i++){
scanf("%d", &qu);
printf("%d:", qu);
set<info>::iterator itp;
int prt;
for( prt = , itp = st.begin(); prt < K && itp != st.end(); prt++, itp++){
printf(" %d", itp->id);
}
printf("\n");
info nd = {qu, hashTB[qu]};
set<info>::iterator it = st.find(nd);
if(it != st.end()){
st.erase(it);
}
nd.cnt = ++hashTB[qu];
st.insert(nd);
}
cin >> N;
return ;
}

总结:

1、题意:动态统计次数。每当用户购买一个东西时,从他购买该东西之前的购买历史中统计出高买次数最多的前K个产品,并推荐给他。

2、N很大,所以每次都排序肯定超时。 由于set可以保证内部有序,所以使用set来排序,用hash表来统计出现频率。每次新购一个物品,先去set中查找,如果存在则删除再重新插入更新后的,如果不存在则直接插入。

3、set重载小于号,在struct外:

bool operator <(const info &a, const info &b){
if(a.cnt == b.cnt)
return a.id < b.id;
else return a.cnt > b.cnt;
}

4、set使用find函数查找 struct 类型变量时,由于已经重载了小于号,所以set会利用小于号来判断不等于。所以可以正常传入一个struct变量 a 并在find函数中查找成员变量都和a相等的变量。

5、给分最多的几个测试点好像用时在2ms左右,所以到时候实在想不到就暴力破解。

A1129. Recommendation System的更多相关文章

  1. PAT A1129 Recommendation System (25 分)——set,结构体重载小于号

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  2. PAT甲级——A1129 Recommendation System【25】

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  3. PAT_A1129#Recommendation System

    Source: PAT A1129 Recommendation System (25 分) Description: Recommendation system predicts the prefe ...

  4. 海量数据挖掘MMDS week4: 推荐系统Recommendation System

    http://blog.csdn.net/pipisorry/article/details/49205589 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  5. PAT1129:Recommendation System

    1129. Recommendation System (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  6. 1129 Recommendation System

    1129 Recommendation System (25 分) Recommendation system predicts the preference that a user would gi ...

  7. PAT甲级 1129. Recommendation System (25)

    1129. Recommendation System (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  8. PAT 1129 Recommendation System[比较]

    1129 Recommendation System(25 分) Recommendation system predicts the preference that a user would giv ...

  9. PAT 甲级 1129 Recommendation System

    https://pintia.cn/problem-sets/994805342720868352/problems/994805348471259136 Recommendation system ...

随机推荐

  1. vue-cli 上传图片上传到OSS(阿里云)

    https://help.aliyun.com/document_detail/32068.html?spm=5176.doc32069.6.304.Qc4SUs(看) https://help.al ...

  2. 机顶盒webview开发调试

    安装node的anywhere插件  启动本地服务器后 使用chrome的DevTool----->   chrome://inspect/#devices 点击inspect  第一次需要FQ ...

  3. MHA高可用及读写分离

    一.MHA简介 二.工作流程 三.MHA架构图 四.MHA工具介绍 五.基于GTID的主从复制 六.部署MHA 七.配置VIP漂移 八.配置binlog-server 九.MySQL中间件Atlas

  4. python爬虫之短信报警

    1 import smtplib import email.mime.multipart import email.mime.text def send_email(content=''): &quo ...

  5. jenkins的 git多分支自动构建

    一.先做好jenkins和gitlab的webhook自动构建 二.选择哪个分支(我这是test分支) 三.选择build Triggers 四.过滤test分支 五.保存即可

  6. 让PC端页面在手机端显示缩小版的解决方法

    做页面的时候我们做好pC端页面时,因编辑那边需求,在手机端页面也应该是缩小版,不能乱的.在网上找了各种解决方案,经实验,这种是可以的: 在head里边加上这两句meta  <meta name= ...

  7. Lodop如何打印直线

    Lodop打印设计提供了可视化设计,生成代码的方便,在打印设计界面上,选择添加打印项的时候,可以看到没有添加直线选项,可添加斜线,然后把添加的斜线调整成直线:线宽=高 -----水平直线线宽=宽--- ...

  8. class前置声明

    https://www.cnblogs.com/King-Gentleman/p/5081159.html 当两个头文件互相包含的时候,类定义会编译出错,这时需要分别添加上对应的类声明 #includ ...

  9. 【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题

    /* 解数值微分初值问题: 龙格-库塔法求前k个初值 + 亚当姆斯法 */ #include<bits/stdc++.h> using namespace std; double f(do ...

  10. SpringMVC 复杂对象数据绑定

    表单在 web 页面上无处不在,有些表单可能很复杂,大部分表单里的输入项都会对应后端对象属性.SpringMVC 可以自动将表单值绑定到对象上!而且能绑定很复杂的对象!!这里就不写那些基本的表单绑定了 ...