藍橋杯省賽日誌統計

2021-10-09 20:10:26 字數 1815 閱讀 8674

小明維護著乙個程式設計師論壇。現在他收集了乙份"點讚"日誌,日誌共有n行。其中每一行的格式是:

ts id

表示在ts時刻編號id的帖子收到乙個"贊"。

現在小明想統計有哪些帖子曾經是"熱帖"。如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是"熱帖"。

具體來說,如果存在某個時刻t滿足該帖在[t, t+d)這段時間內(注意是左閉右開區間)收到不少於k個讚,該帖就曾是"熱帖"。

給定日誌,請你幫助小明統計出所有曾是"熱帖"的帖子編號。

第一行包含三個整數n、d和k。

以下n行每行一條日誌,包含兩個整數ts和id。

對於50%的資料,1 <= k <= n <= 1000

對於100%的資料,1 <= k <= n <= 100000 0 <= ts <= 100000 0 <= id <= 100000

按從小到大的順序輸出熱帖id。每個id一行。

7 10 2

0 10 10

10 10

10 1

9 1100 3

100 313

資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

我的做法是用尺取法結合stl會大大降低複雜度

首先對出現的時刻進行排序,然後用i,j維護一段區間,當區間對度小於d時j向後推動增大區間長度,否則i就向後推動減小區間長度,當區間滿足條件時可以對這一段區間的時刻每個帖子的點讚數量進行乙個計數,然後判斷是否存在熱帖

利用set的去重和排序的特性處理起來會更加方便

#include

#include

#include

#include

#include

using

namespace std;

set<

int> t;

//臨時存放時刻

int time[

100000];

// 存放出現的時刻

vector<

int> ve[

100000];

//存放每個時刻點讚的帖子編號

set<

int> heat;

//存放熱帖

int n,d,k;

void

check

(int x,

int y)}}

}int

main()

int con=0;

for(set<

int>

:: iterator it=t.

begin()

;it!=t.

end(

);it++

)int i=

0,j=0;

//指向第乙個數

while

(i<=j&&jelse

}for

(set<

int>

::iterator it=heat.

begin()

;it!=heat.

end(

);it++

)return0;

}

日誌統計 第九屆藍橋杯省賽題目八

小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度 為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個...

藍橋杯省賽有感

2014年尾,我還不懂什麼是演算法,就參加了藍橋杯初賽。刷了一些題,半猜半蒙,靠數學知識就進了省賽。原本是想寒假好好學習演算法,畢竟從小比較喜歡這種題目,小學跟初中都參加過奧數。不過,計畫總是趕不上變化。我寒假要去公司幫忙十天,而且能力有限,後面也在學校幫忙修改一些內容和bug。結果,20115年三...

藍橋杯 日誌統計

尺取法 vector容器 全域性變數能開更大的空間哦 題目小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個...