П'ятірка Насера#12478

П'ятірка Насера (Розбір)

Автор задачі:

Mohammad Nasser (MOAGEZA)

Підготував:

Mohammad Nasser (MOAGEZA)

Відредагував:

Hasan Saleh (MathModel)

Розв'язок

Загальна ідея: Нам потрібно дописувати цифру до доти, поки x > y.

Щоразу, коли ми дописуємо до числа з цифрами, нове число стає:

\text{new\_x} = \text{old\_x} \times 10 + 5

Ми просто симулюємо цей процес: продовжуємо дописувати і рахуємо операції, поки x > y.

Оскільки кожна операція множить на і додає , число зростає експоненційно. Після операцій:

x_k = x_0 \times 10^k + 5 \times \frac{10^k - 1}{9}

Однак для заданих обмежень симуляція є достатньою, оскільки відповідь завжди мала (щонайбільше \log_{10}(y) операцій).

Розв'язок працює за час на один тест, де d = \lfloor \log_{10} y \rfloor + 1 — кількість цифр у .

#include <bits/stdc++.h>
using namespace std;

void solve() {
    long long x, y;
    cin >> x >> y;
    
    int cnt = 0;
    while (x <= y) {
        x = x * 10 + 5;
        cnt++;
    }
    
    cout << cnt;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    int t;
    cin >> t;
    while (t--) {
        solve();
        cout << '\n';
    }
    return 0;
}