思路:題意很明確,實現增刪查,三種操作,資料範圍比較大,如果暴力,肯定超時,考慮使用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,但是哈夫曼樹可以有很多顆,哪一顆才是字典序最小的呢,這就很難。為何...