AcWing 1622. 推荐系统
原题链接
简单
作者:
leo123456
,
2020-08-31 20:30:41
,
所有人可见
,
阅读 497
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=50010;
int n,m;
int cnt[N];//存商品出现的次数
int top_k[11]; //存商品编号
bool cmp(int a,int b)
{
if(cnt[a]!=cnt[b]) return cnt[a]>cnt[b];
else return a<b;
}
int main()
{
scanf("%d%d",&n,&m);
int k=0;
for(int i=0;i<n;i++)
{
int id;
scanf("%d",&id);
if(i)
{
printf("%d:",id);
for(int j=0;j<k;j++) printf(" %d",top_k[j]);
printf("\n");
}
cnt[id]++; //商品访问数+1
bool exists=false;
for(int j=0;j<k;j++) //如果访问的商品出现过了,就直接忽略
if(top_k[j]==id)
{
exists=true;
break;
}
if(!exists) top_k[k++]=id;
sort(top_k,top_k+k,cmp);
k=min(k,m); //动态维护
}
return 0;
}