這道題其實就是簡單的模擬題,難點在於如何設計表,如何提高效率。如果單純使用vector在資料量比較大的情況下會出現超時。我在做題的時候考慮過使用vector來解題,會出現超時的情況,因為插入和刪除操作會導致vector內位置移動,會有大量操作。這一題可以使用set來解題,首先set的底層實際上是 乙個紅黑樹,即平衡二叉樹,這樣插入的效率基本上保持在logn。set是自動有序的,那麼對於查詢操作也很方便,其效率基本保持在n。實際上比較耗時的是刪除操作。我本來的想法是遍歷整張表,根據type 和id 找到要刪除的點之後再進行刪除操作,但是這樣操作的效率為n,如果我再維持一張表,根據提供的type和id ,我能夠得到完整的商品資訊,完整的商品資訊對於set表來說是key,根據這個key再去表中查詢刪除,其中查詢的效率僅為logn,相對來說速度有所提公升。
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
class
good
public
:good
(int _type,
int _id,
int _score)
bool
operator
<
(const good d)
const};
struct index
bool
operator
<
(const index d)
const};
intmain()
}int opnum ;
scanf
("%d"
,&opnum)
;while
(opnum--
)else
if(op ==2)
else
if(op ==3)
; vector<
int> res[
100]
;scanf
("%d"
,&sumnumber)
;for
(int k=
0; k
)for
(set
::iterator it = datamap.
begin()
; it!=datamap.
end(
)&&sumnumber;it++)}
for(
int p=
0; p
)else
cout << res[p]
[h];}}
cout << endl;}}
}return0;
}
**鏈 CSP 201909 4 推薦系統
題目描述 題意解讀 新增某類商品 刪除某類商品中的乙個 查詢商品 思路分析 滿分 include include include include include using namespace std typedef struct product 重定義 操作符,這決定了set的自動排序 bool ...
CCF CSP 201909 4 推薦系統
有m 0,49 類商品,每類商品有n 0,30000 個物品.初始時,給出第i有三種操作 其中總操作個數opnum 100000,查詢個數opask 100 求每次查詢時每類商品選出的商品編號 考點 問題需求理解能力 倒不如說出題人的表達能力 stl的熟練應用 時間複雜度的分析 問題建模能力。題目未...
CCF認證201909 4推薦系統
我的個人部落格 原題鏈結 ccf認證201909 4推薦系統 解題思路 錯誤思路 理解清楚題意再做題,這是前提啊。剛開始讀題的時候不明白下面這句話的意思。剛開始我的理解是。每個商品按分數從高到低選出ki個商品。我用vector set data m 存放商品的學校。其中data i 對應i類商品的所...