11月4日學習記錄
阿新 • • 發佈:2018-11-05
1.11月4日的貪心記錄與總結(見部落格) 2.終於結束的起點: 更新fib時若資料過大,只需要記錄3個變數來計算某一位fib值 注意fib很容易爆掉,一定開long long,且取模運算見程式碼,防止溢位(題目要求取模) 3.關於字串的一些操作: 1.map:做了潛伏者:map一個經常在字串中的用途就是作為bool的出現,起到和雜湊一樣的作用。 (然而本人雜湊並不熟練,且map操作簡便,雖然慢,但考場將優先選擇) 注意使用細節:map<string,bool>vis; vis[s]=1; 易錯:map<string,bool>vis[maxn]直接定義vis即可,這是一個集合(關聯式容器) 2.substr:做了“字串變換”:substr在拼接問題中使用:string kk=str.substr(0,i); 你可以獲取字串str從0位置 到i-1位置的字串,這個字串由kk記錄儲存。string kk=str.substr(i);你可以獲取字串str從i位置到長度 結尾的子串,並由kk來記錄並儲存。 Tip:關於具體的字串拼接問題見該題面:1.你可以學到字串若想直接拼接:ans+=str.substr(0,i);其實就是在ans的尾部街上新的構造子串 2.關於如何拼接:(題面)串a,串b。你需要通過下列操作將a變為b 下列將有諸多的操作:對於每個操作,你可以將子串1轉化成子串2 所以關鍵在於如何模擬拼接:即對於a的每一個位置判斷,是否可以進行諸多操作中的一種 之後再搜尋3.關於本題的搜尋選擇 以及 bfs的new剪枝: 本題要求找到最短的轉化次數->就是bfs @@@@@@:請仔細思考,這就是最短路問題。你很難用dfs來實現,已經寫過實現不了 本題用到了bfs剪枝:如果當前狀態的子串已經存在過了就返回上一個狀態 4.關於本題一定注意學到了最重要的知識時不定向讀入: while(cin>>a[n]>>b[n]) n++; 其他形式會讀入不全或讀入錯誤,你可能覺得不可思議: n=0; while(cin>>a[++n]>>b[n]); or while(cin>>a[n++]>>b[n]); 但這樣寫就是會讀入錯誤 5.在bfs過程中使用了結構體對列,因為我們需要知道某一個子串,變化到這一步所需要的步數。這其實大大幫助我們儲存更多的變數與引數 3.要求:複習單詞接龍