首页 > 试题广场 >

实时社交媒体热点追踪

[编程题]实时社交媒体热点追踪
  • 热度指数:81 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
您正在为一个社交媒体平台设计一个实时热点追踪系统。
该系统持续不断地从海量的用户帖子中提取关键词,并将这些关键词送入一个处理队列。
系统需要维护一个仪表盘,用于展示当前最受关注的热点话题。

然而,仪表盘的显示空间有限。
为了保证话题的新鲜度,系统遵循“先进先出”的原则:
每当一批新的关键词流入后,系统会从队列中最早进入的话题开始,更新并展示在仪表盘上,展示完毕后即从队列中移除,为更新的话题腾出空间。

您需要模拟这个热点追踪系统的核心逻辑。系统维护一个带计数器的关键词队列。
- 当一批新的关键词流入时,如果某个关键词已存在于队列中,其计数器加一;如果是新关键词,则将其加入队列尾部,计数器置为一。
- 每处理完一批关键词后,系统会从队列头部(即最早进入的关键词)开始,输出最多 n 个关键词及其当前的计数值。
- 被输出的关键词将从队列中被彻底移除。这意味着,如果该关键词后续再次出现,它将被视为一个全新的热点,重新从队尾进入。

输入描述:
- 第一行为一个整数 n,代表仪表盘的显示容量。n 的范围是 [0, 100]。当 n=0 时,表示仪表盘关闭,不输出任何内容。
- 从第二行开始,每行为一批用空格分隔的关键词字符串。
- 每批最多包含 200 个关键词,总批数不超过 1000 行。


输出描述:
- 从第二行输入开始,每一批输入对应一行输出。
- 输出格式为 `关键词 计数值`,多个关键词信息之间用空格隔开。
- 如果当前队列为空,无法输出任何内容,则该行输出 `null`。
示例1

输入

28
zws psp fdz fas gxl qua

jzp ekp vap kgb qyv lay buy wle lbb pee wtv kyn wyv ngc



neq ikg qjk qqf tde pjj nmr
cog qbx yjg qve dmb erx yli
ksx jkx ijo wvt wsp rcc pbg ctf xun cpb byo edp pyj jta

hrv nyo dvv muv rnq yyr


ywe jde zmi kxq olj gdk ckb xfz aqw

nrt vmj abm pdd itt utk xyy ecy fmo tat fza zcb rap
axr anx rnl phd yms qam cyq yhm kku vjn yms wox


toz xbi dtt hvd cfv uuu rqi hlz jhv rig iky wxp zhu
scr olw mwk qyy adi

wga icd cjg afn kyu lcq jpk yht
zit xce pkf tji yxg wke zfb bhw him klh tdg lwg pos fan

jgy ebc ocp nzf yhn yte zqt cyl ytm vrk ecl
upz hvd ngk dbg fjl bjv ekw ojq edh cte yzr cik nwc pqa
hjo eki upj ahq dpx fkl wfs app vlr vdf qlb rxb uja ryg

pwk ywg wmv tln eaq flv nwq
fvz dox yrc izs jmc obo fdw jml zbr shi qmg yqw chj kno ado
ind fsx nva gox tva jrk gzl dbe
ych tbr wmy kml xwx ttn
efv zkk hro hwt loc ihc hbs hyg oug asz dwb zqn jtl


hpc zqa tnp mbq vwu mno kno uhx lie shr
sum skm soy ymq kqh jlu zwh iwi irb
cwh vsf nmp iqb nry ovx zws gup tvy diu ina obd
mqd ccr noq gvo oxi

egi xdb rro vlq fvv hkw xch
vta ege wtf cem bcc zmv bgx vkt gcv gwq rsw iad

tun dfj hst rlu tbe zrx ugx

xqp shc aur uyz ojh gib mfz ulp kzm kfx hhv
qjl msx bsz lfy fxr mpf hvj xnr kuc ayq mup hye yxz uvj
ifh ivr ztu wzr mub ens bzg xgu lxy lvi cqv
bxh jpz bsb uju dbk tru moa hyk gga ull wsy vdm bsv mvr

输出

zws 1 psp 1 fdz 1 fas 1 gxl 1 qua 1
null
jzp 1 ekp 1 vap 1 kgb 1 qyv 1 lay 1 buy 1 wle 1 lbb 1 pee 1 wtv 1 kyn 1 wyv 1 ngc 1
null
null
null
neq 1 ikg 1 qjk 1 qqf 1 tde 1 pjj 1 nmr 1
cog 1 qbx 1 yjg 1 qve 1 dmb 1 erx 1 yli 1
ksx 1 jkx 1 ijo 1 wvt 1 wsp 1 rcc 1 pbg 1 ctf 1 xun 1 cpb 1 byo 1 edp 1 pyj 1 jta 1
null
hrv 1 nyo 1 dvv 1 muv 1 rnq 1 yyr 1
null
null
ywe 1 jde 1 zmi 1 kxq 1 olj 1 gdk 1 ckb 1 xfz 1 aqw 1
null
nrt 1 vmj 1 abm 1 pdd 1 itt 1 utk 1 xyy 1 ecy 1 fmo 1 tat 1 fza 1 zcb 1 rap 1
axr 1 anx 1 rnl 1 phd 1 yms 2 qam 1 cyq 1 yhm 1 kku 1 vjn 1 wox 1
null
null
toz 1 xbi 1 dtt 1 hvd 1 cfv 1 uuu 1 rqi 1 hlz 1 jhv 1 rig 1 iky 1 wxp 1 zhu 1
scr 1 olw 1 mwk 1 qyy 1 adi 1
null
wga 1 icd 1 cjg 1 afn 1 kyu 1 lcq 1 jpk 1 yht 1
zit 1 xce 1 pkf 1 tji 1 yxg 1 wke 1 zfb 1 bhw 1 him 1 klh 1 tdg 1 lwg 1 pos 1 fan 1
null
jgy 1 ebc 1 ocp 1 nzf 1 yhn 1 yte 1 zqt 1 cyl 1 ytm 1 vrk 1 ecl 1
upz 1 hvd 1 ngk 1 dbg 1 fjl 1 bjv 1 ekw 1 ojq 1 edh 1 cte 1 yzr 1 cik 1 nwc 1 pqa 1
hjo 1 eki 1 upj 1 ahq 1 dpx 1 fkl 1 wfs 1 app 1 vlr 1 vdf 1 qlb 1 rxb 1 uja 1 ryg 1
null
pwk 1 ywg 1 wmv 1 tln 1 eaq 1 flv 1 nwq 1
fvz 1 dox 1 yrc 1 izs 1 jmc 1 obo 1 fdw 1 jml 1 zbr 1 shi 1 qmg 1 yqw 1 chj 1 kno 1 ado 1
ind 1 fsx 1 nva 1 gox 1 tva 1 jrk 1 gzl 1 dbe 1
ych 1 tbr 1 wmy 1 kml 1 xwx 1 ttn 1
efv 1 zkk 1 hro 1 hwt 1 loc 1 ihc 1 hbs 1 hyg 1 oug 1 asz 1 dwb 1 zqn 1 jtl 1
null
null
hpc 1 zqa 1 tnp 1 mbq 1 vwu 1 mno 1 kno 1 uhx 1 lie 1 shr 1
sum 1 skm 1 soy 1 ymq 1 kqh 1 jlu 1 zwh 1 iwi 1 irb 1
cwh 1 vsf 1 nmp 1 iqb 1 nry 1 ovx 1 zws 1 gup 1 tvy 1 diu 1 ina 1 obd 1
mqd 1 ccr 1 noq 1 gvo 1 oxi 1
null
egi 1 xdb 1 rro 1 vlq 1 fvv 1 hkw 1 xch 1
vta 1 ege 1 wtf 1 cem 1 bcc 1 zmv 1 bgx 1 vkt 1 gcv 1 gwq 1 rsw 1 iad 1
null
tun 1 dfj 1 hst 1 rlu 1 tbe 1 zrx 1 ugx 1
null
xqp 1 shc 1 aur 1 uyz 1 ojh 1 gib 1 mfz 1 ulp 1 kzm 1 kfx 1 hhv 1
qjl 1 msx 1 bsz 1 lfy 1 fxr 1 mpf 1 hvj 1 xnr 1 kuc 1 ayq 1 mup 1 hye 1 yxz 1 uvj 1
ifh 1 ivr 1 ztu 1 wzr 1 mub 1 ens 1 bzg 1 xgu 1 lxy 1 lvi 1 cqv 1
bxh 1 jpz 1 bsb 1 uju 1 dbk 1 tru 1 moa 1 hyk 1 gga 1 ull 1 wsy 1 vdm 1 bsv 1 mvr 1

备注:
本题由牛友@Charles 整理上传
####第9例过不去

from
ast import Not

import sys

def cnt_keywordadd(cnt, kw):
    for i, item in enumerate(cnt):
        if item[0] == kw:
            cnt[i][1] += 1
            return
    cnt.append([kw, 1])

def output_del(cnt,n):
    output_parts = []
    count = 0
   
    while count < n and cnt:
        item = cnt.pop(0)
        output_parts.append(f"{item[0]} {item[1]}")
        count += 1
   

    return " ".join(output_parts)

n = int(input())
# 创建列表
cnt = []

if n == 0 :
    for line in sys.stdin:
        print('null')
else:
    for line in sys.stdin:
        new_data = line.split()
        if not new_data :
            print('null')
            continue
        for kw in new_data:        
                cnt_keywordadd(cnt,kw)          #判断是否存在
        print(output_del(cnt,n))


发表于 今天 03:06:11 回复(0)