uva題目做題記錄

2021-05-22 20:23:38 字數 908 閱讀 8267

一般的思路都是不開陣列直接計算,即先設乙個最大值

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...