10114. 數列循環 pro

I'm a slow walker, but I never walk backwards.

Task Description
考慮以下的演算法:

  • 輸入 n
  • 印出 n
  • 如果 n=1 結束
  • 如果 n 是奇數,那麼 n=3×n+1
  • 否則 n=n/2
  • 跳到第 2 行繼續執行
例如:輸入 n=22,得到的數列:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
給一個輸入 n(0 < n < 1,000,000),透過此演算法可以得到一個數列(1作為結尾)。此數列的長度稱為 n 的cycle-length。上面提到的例子,n=22 的cycle length為16。
問題來了:對任兩個正整數 i、j,我們想要知道介於 i、j(包含 i、j)之間的正整數所產生的數列中,最大的 cycle length 是多少。

note:需要使用 list 以及整數除法 "//" 才有辦法縮減運算時間,否則可能會 TLE 而損失部分分數
Input Format
輸入的第一列是一個正整數 m(1 ≤ m ≤ 50),代表以下有 m 列測試資料。
每列測試資料包含一對正整數資料 i、j(0 < i < j < 1,000,000)。
Output Format
對每一列測試資料,輸出介於 i、j(包含 i、j)之間的正整數所產生的數列中,最大的 cycle length。
Sample Input
5
1 10
15 25
100 200
201 210
900 1000
Sample Output
20
24
125
89
174

Submit

Login

Testdata Set

Download Testdata