PAT甲题题解-1129. Recommendation System (25)-排序
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789819.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~
题意:用户每次选择一个indice,输出之前出现的频率最高的k个indice
如果恰好有两个频率一样,输出indice较小的那个
显然不能每次都要对当前所有的item排个序,会超时的
由于每次只要给出前k个出现频率最高的,如果出现频率一样,则给出值最小的
所以只要能存储前k个item的出现频率和值就行
用户每查询一个indice,先对当前的recommend进行排序,输出k个,不足k个的有多少输出多少,然后进行更新操作。
如果indice在当前的recommend里,那么只要更新下频率即可
如果不在的话,那么就要分情况了
如果当前recommend不足k个,那么往后添加一个新的即可
如果当前recomend已经有k个,只要将新的indice与最后一个进行比较与替换即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=+;
int cnt[maxn];
int n,k; struct Node{
int indice;
int cnt;
bool operator<(const Node tmp)const{
if(cnt==tmp.cnt){
return indice<tmp.indice;
}
else{
return cnt>tmp.cnt;
}
}
}recommend[+];
int main()
{
int indice;
int len;
Node node;
memset(cnt,,sizeof(cnt));
scanf("%d %d",&n,&k);
if(n>=){
scanf("%d",&indice);
cnt[indice]++;
node.cnt=cnt[indice];
node.indice=indice;
recommend[]=node;
len=;
}
for(int i=;i<n;i++){
scanf("%d",&indice);
printf("%d:",indice);
//当len<k的时候,若没在len个里面出现过,往recommend数组后面添就行
if(len<k){
sort(recommend,recommend+len);
bool isExist=false;
int idx;
for(int j=;j<len;j++){
printf(" %d",recommend[j].indice);
if(recommend[j].indice==indice){
isExist=true;
recommend[j].cnt++;
cnt[indice]++;
}
}
if(!isExist){
recommend[len].indice=indice;
recommend[len].cnt=cnt[indice]=;
len++;
}
}
//如果recommend已经有k个了,那么如果在这k个里面没出现过,当前的就得和第k个比较了
else{
sort(recommend,recommend+k);
bool isExist=false;
int idx;
for(int j=;j<k;j++){
printf(" %d",recommend[j].indice);
if(recommend[j].indice==indice){
isExist=true;
recommend[j].cnt++;
cnt[indice]++;
}
}
if(!isExist){
cnt[indice]++;
if(cnt[indice]>recommend[k-].cnt ||(cnt[indice]==recommend[k-].cnt && indice<recommend[k-].indice)){
recommend[k-].cnt=cnt[indice];
recommend[k-].indice=indice;
}
}
}
printf("\n");
}
return ;
}
PAT甲题题解-1129. Recommendation System (25)-排序的更多相关文章
- PAT甲题题解-1051. Pop Sequence (25)-堆栈
将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
- PAT甲题题解-1101. Quick Sort (25)-大水题
快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着 ...
- PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)
如题,大水题...贴个代码完事,就这么任性~~ #include <iostream> #include <cstdio> #include <algorithm> ...
- PAT甲题题解-1130. Infix Expression (25)-中序遍历
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789828.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1016. Phone Bills (25)-模拟、排序
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789229.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1021. Deepest Root (25)-dfs+并查集
dfs求最大层数并查集求连通个数 #include <iostream> #include <cstdio> #include <algorithm> #inclu ...
- PAT甲题题解-1024. Palindromic Number (25)-大数运算
大数据加法给一个数num和最大迭代数k每次num=num+num的倒序,判断此时的num是否是回文数字,是则输出此时的数字和迭代次数如果k次结束还没找到回文数字,输出此时的数字和k 如果num一开始是 ...
- PAT甲题题解-1028. List Sorting (25)-水排序
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
随机推荐
- VMware虚拟机中CentOS 7的硬盘空间扩容
查看centos7系统挂载点信息 扩展VMWare-centos7硬盘空间 对新增加的硬盘进行分区.格式化 添加新LVM到已有的LVM组,实现扩容 1.查看centos7系统挂载点信息 df -h查看 ...
- Django框架的使用教程--视图和路由[二]
视图和路由 1.创建一个django_test应用 2.setting中设置django_test INSTALLED_APPS = [ 'django.contrib.admin', 'django ...
- percona-toolkit大表操作DDL使用
1. 系统与安装数据库 [root@zhang ~]# cat /etc/redhat-release # 也可以使用其他版本 CentOS Linux release (Core) [root@zh ...
- January 26th, 2018 Week 04th Friday
A great forest is set on fire by a small spark. 最小的火能点着最大的树林. It is just a spark, but it is enough t ...
- January 05th, 2018 Week 01st Friday
You can't make decisions based on fear and the possibility of what might happen. 不要因为恐惧未知的可能而妄下决定. P ...
- nginx配置静态资源访问
本篇配置使用场景:本地通过浏览器访问linux上某个文件夹下的文件: 1.安装jdk及nginx步骤省略 2.进入正题 (1) 查看nginx安装路径:[root@localhost conf]# w ...
- 【学习笔记】python 进阶特性
__slots__魔法 在Python中,每个类都有实例属性.默认情况下Python用一个字典来保存一个对象的实例属性.这非常有用,因为它允许我们在运行时去设置任意的新属性. 然而,对于有着已知属性的 ...
- merge-two-sorted-lists (归并排序中的合并)
class Solution { public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if (l1 == NULL) retur ...
- 如何使用openscad绘制一个简单的键帽.
1 新建空项目 2测数据 测量得出数据.这个长方体的长宽高分别是1.6.4.6.8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备) 3画图 写代码 导入模型 为了方便以后 ...
- Python高级网络编程系列之第二篇
在上一篇中,我们深入探讨了TCP/IP协议的11种状态,理解这些状态对我们编写服务器的时候有很大的帮助,但一般写服务器都是使用C/Java语言,因为这些语言对高并发的支持特别好.我们写的这些简单的服务 ...