A1129 Recommendation System (25) 逻辑///排序

本文介绍了一种改进的数据处理方法,通过缩减样本空间来提高排序效率,避免了传统结构体处理方式在大规模数据集上的超时问题。具体实现上,采用了一个哈希表来跟踪已处理的数值,同时使用数组存储并按需调整顺序,确保了在每次迭代中仅需排序前四个元素,大大提升了处理速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题刚开始采用的结构体的方式处理这个问题,但是最后导致了3、4两例出现了超时错误,在看了一些同学的分享之后,得出了如下的解法,解法有点类似于缩减样本空间,本来每次都需要排序的,缩减之后变成了每次只有排前面的四个就好,第四个即为当前的输入数据。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=50010;
bool hashtable[maxn]={false};
int value[maxn],cnt[maxn]={0},num=0;
bool cmp(int a,int b)
{
    if(cnt[a]!=cnt[b])return cnt[a]>cnt[b];
    else return a<b;
}
int main()
{
    int n,m,k;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&k);
        if(i==0)
        {
            value[num++]=k;
            hashtable[k]=true;
            cnt[k]++;
            continue;
        }
        printf("%d:",k);
        for(int j=0;j<num;j++)
        {
            printf(" %d",value[j]);
        }
        printf("\n");
        if(hashtable[k]==false)
        {
            value[num++]=k;
            hashtable[k]=true;
            cnt[k]++;
        }
        else
        {
            cnt[k]++;
        }
        sort(value,value+num,cmp);
        if(num==m+1)
        {
            hashtable[value[--num]]=false;
            value[num]=0;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值