一般的思路都是不開陣列直接計算,即先設乙個最大值
max,每次迴圈時將每個數的步數和
max進行比較,如果
max小於該數,交換
2數,否則繼續迴圈,直至迴圈結束。此時花費時間較多,每次輸入都要重新計算。
若能將每次迴圈的結果都儲存在陣列裡,則能節省大量時間,故先生成陣列。還有,每次輸入時,都會有許多重複計算。如輸入3和
6: 數字
計算次數
3->10->5->16->8->4->2->1
7 4->2->1
2 5->16->8->4->2->1
56->3->10->5->16->8->4->2->1
8我們發現
6的計算實際上已包括了3,
4,5的計算,即3,
4,5重複計算了。如果能將重複計算的時間也省去,則程式效率又能提高。
當然,如果還要優化的話,還是可以優化的,可以將除
2運算轉為位運算。同時注意到當
t為奇數時,乘上3再加
1會變成偶數,偶數要除以
2,這時可以將
2步合成一步,即:
t+=(t>>1)+1
。**如下:
該**執行時間為
0.044s。
本題需要注意的有2點:
(1)未告訴i和j
的大小,所以輸入後要麼另設
2個新變數,要麼輸入i和
j的值後馬上輸出。
(2 )
本題要計算到
1000000
,當用int
型資料時會越界,故用
unsigned int
或long int
型資料。
做題記錄uva1625
紫書上的例題,在dp中運用了一些技巧,領悟了些許。記錄兩個子串中各字母的開始和結束位置,每次dp時只要有已開始但未結束的字母就加1.要搞清楚dp時i,j的含義,是已選還是未選,這樣才能保證dp是條件寫對。要學會預處理。題目鏈結 include using namespace std int dp 5...
KMP做題記錄
題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...
8 25 9 25 做題記錄
2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...