ccf csp 2019 9 第四題 推薦系統

2021-09-29 15:05:12 字數 1089 閱讀 2719

思路:題意很明確,實現增刪查,三種操作,資料範圍比較大,如果暴力,肯定超時,考慮使用set和map。set 過載cmp,按照分數進行排序,輸出的時候進行遍歷即可,插入也很簡單,直接操作即可,但是刪除不好辦,這時用map也將資料存起來,對種類和id進行查詢得到score,得到這三個資料後可以直接用set刪除。

本來的想法是用map按照value排序,因為map刪除的話可以直接找key,而set刪除必須把所有的值都找到。而用set和map結合間接實現了這個思想。

#includeusing namespace std;

#define maxn 30005

#define maxm 55

#define inf 2000000000

#define ios ios::sync_with_stdio(false)

struct g;

struct cmp

};int main()

); }

if(ch==2)//刪除

);} if(ch==3)//查詢

; int cnt[maxm]=;

for(int j=0;j>ff[j];

vectorv[m];

int sum=0;

for(set::iterator p=tt.begin();p!=tt.end();p++)

}else

break;

/*這一段**不加,只有八十分,算一下複雜度,感覺最後兩個資料沒卡我,就這樣過了*/

bool flag=true;

for(int j=0;j

if(cnt[j]!=ff[j])

if(flag)

break;

}for(int j=0;j

cout<

}} }

return 0;

}

第四題 替換空格

可以使用這樣的方法 先遍歷一遍字串,求出字串中空格的個數,由此,可以計算出替換之後的字串的總長度,然後標記出字串的末尾p1和替換之後的末尾p2。再逐步往前移動p1,p2,同時將p1資料複製到p2的位置中,如果p1指向了乙個空格,則將p1往前移動一格,p2的位置依次插入 0 2 並往前移動。當空格替換...

2018暑假第四題

題目 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。python 示例 1 輸入 121輸出 true示例 2 輸入 121輸出 false解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10輸出 false解釋 ...

CCF第四題思考

當可以隨意選擇兩個節點的時候它是貪心法 哈夫曼 當只能選相鄰節點時,它變成了動態規劃,為什麼只能選相鄰節點呢,因為只要從左到右選葉結點,得到的就是字典序,而我之前的想法是,先構造出哈夫曼樹,再把葉結點代表的編碼從左到右賦給abcde,但是哈夫曼樹可以有很多顆,哪一顆才是字典序最小的呢,這就很難。為何...