PAT A1129 Recommendation System (用简单排序实现)

题目不多分析了,做题的时候第一思路就是排序,但想着PAT这尿性50000个数据做50000次排序肯定超时,然后发现只需输出最多10个数,想起了用淘汰+部分排序的思想,AC~

只是做完后发现大佬们都用set实现。。。不知优劣,仅供参考~

/***************2019.9.4-15:35-16:11**************/
//A1129 Recommendation System (25 分) 45min 
//题目分析:
//算法思想:不知道什么思想,淘汰算法?部分排序 
//遇到的问题:
#include<iostream>
#include<algorithm>
#include<vector>
#include<math.h>
#include<string>
#include<string.h>
using namespace std;

int freq[50008]={};
bool inans[50008]={};
bool cmp(int a,int b){
	if(freq[a]!=freq[b]) return freq[a]>freq[b];
	else return a<b;
}

int main(){
	int i,j;
	int K,N,query;
	scanf("%d%d",&N,&K);
	
	int ans[K]; 
	for(i=0;i<K;i++) ans[i]=50001;//因为N最大为50000,故设500001为不存在 
	freq[50001]=-1;//同样设不存在的次数为-1,恒小 
	scanf("%d",&query);//第一个先输入,因为没输出 
	freq[query]++;
	inans[query]=1;
	ans[0]=query;
	
	for(i=1;i<N;i++){
		scanf("%d",&query);
		sort(ans,ans+K,cmp);
		if(ans[0]!=50001) printf("%d:",query);
		j=0;
		while(ans[j]!=50001&&j<K) printf(" %d",ans[j++]);
		printf("\n");
		freq[query]++;
		if(inans[query]==0){//没在里边,判与ans中最后一个A做替换 
			if(ans[K-1]==50001||freq[ans[K-1]]<freq[query]
		  		||(freq[ans[K-1]]==freq[query]&&query<ans[K-1])){
		  	//A不存在 ||A比query频次低||频次相等下A>query 
				inans[ans[K-1]]=0;
				ans[K-1]=query;
				inans[query]=1;
			}
		}	
	}
	return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值