ConcursC++17

collatz

Collatz are TT vectori, fiecare vector ii (1≤i≤T1 \le i \le T) fiind format inițial din numerele naturale consecutive de la SiS_i la DiD_i. După părerea lui, un vector îngrijit are toate elementele egale cu 11. Deoarece lui Collatz îi plac vectorii îngrijiți, el își dorește ca toate elementele vectorilor să devină 11, așa că transformă pe rând vectorii, aplicând pentru fiecare un număr minim de operații. O operație constă din alegerea unui element al vectorului și apoi:

  • dacă elementul este par, atunci valoarea lui se înjumătățește;
  • dacă elementul este impar, având inițial valoarea xx, atunci valoarea lui devine 2⋅x+22 \cdot x + 2.

Cerință

Pentru fiecare dintre cei TT vectori, determinați numărul minim de operații prin care poate deveni îngrijit.

Date de intrare

Fișierul de intrare collatz.in conține pe prima linie numărul TT, cu semnificația din enunț, iar pe fiecare din următoarele TT linii se află câte două numere SiS_i și DiD_i, separate prin câte un spațiu, cu semnificația din enunț pentru fiecare vector ii.

Date de ieșire

Fișierul de ieșire collatz.out conține TT numere, fiecare pe câte o linie, reprezentând numărul minim cerut pentru fiecare dintre cei TT vectori în ordine.

Restricții și precizări

  • 1≤T≤1 0001 \le T \le 1 \ 000, număr natural;
  • 1≤Si≤Di≤10161 \le S_i \le D_i \le 10^{16} și Si,DiS_i, D_i sunt numere naturale, pentru orice 1≤i≤T1 \le i \le T.
#PunctajRestricții
163Di≤1 000D_i \le 1 \ 000
216Di≤106D_i \le 10^6
312Di≤107D_i \le 10^7
49fără alte restricții

Exemplu

collatz.in

3
2 2
4 5
1 4

collatz.out

1
9
7

Explicație

Primul vector: Vectorul inițial este [2][2]. Este nevoie de o singură operație pentru a-l transforma pe [2][2] în [1][1].

Al doilea vector: Vectorul inițial este [4,5][4, 5]. O succesiune posibilă de 99 operații pentru a transforma vectorul în [1,1][1, 1] este următoarea:

  • [4,5]→[4,12][4, 5] \rightarrow [4, 12]
  • [4,12]→[4,6][4, 12] \rightarrow [4, 6]
  • [4,6]→[4,3][4, 6] \rightarrow [4, 3]
  • [4,3]→[4,8][4, 3] \rightarrow [4, 8]
  • [4,8]→[4,4][4, 8] \rightarrow [4, 4]
  • [4,4]→[4,2][4, 4] \rightarrow [4, 2]
  • [4,2]→[4,1][4, 2] \rightarrow [4, 1]
  • [4,1]→[2,1][4, 1] \rightarrow [2, 1]
  • [2,1]→[1,1][2, 1] \rightarrow [1, 1]

Al treilea vector: vectorul inițial este [1,2,3,4][1, 2, 3, 4]. O succesiune posibilă de 77 operații pentru a transforma vectorul în [1,1,1,1][1, 1, 1, 1] este:

  • [1,2,3,4]→[1,2,3,2][1, 2, 3, 4] \rightarrow [1, 2, 3, 2]
  • [1,2,3,2]→[1,2,3,1][1, 2, 3, 2] \rightarrow [1, 2, 3, 1]
  • [1,2,3,1]→[1,2,8,1][1, 2, 3, 1] \rightarrow [1, 2, 8, 1]
  • [1,2,8,1]→[1,1,8,1][1, 2, 8, 1] \rightarrow [1, 1, 8, 1]
  • [1,1,8,1]→[1,1,4,1][1, 1, 8, 1] \rightarrow [1, 1, 4, 1]
  • [1,1,4,1]→[1,1,2,1][1, 1, 4, 1] \rightarrow [1, 1, 2, 1]
  • [1,1,2,1]→[1,1,1,1][1, 1, 2, 1] \rightarrow [1, 1, 1, 1].

Sursă și autori

OJI 2026, clasele 9. Lețu Andrei.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑