Нассер і перестановка#12348

Нассер і перестановка (Розбір)

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

Mohammad Nasser (MOAGEZA)

Підготовлено:

Mohammad Nasser (MOAGEZA)

Відредаговано:

Hasan Saleh (MathModel)

Розв'язок

Загальна ідея: Щоб найбільший спільний дільник сусідніх різниць був більший за , усі різниці повинні мати спільний дільник щонайменше .

Найпростішою стратегією є побудова перестановки, в якій числа з однаковою парністю згруповані разом. Наприклад:

[1,3,5,7,\ldots,2,4,6,8,\ldots]

У середині кожної групи парності кожна сусідня різниця є парною, тобто ділиться на . Тому найбільший спільний дільник цих різниць щонайменше .

Найдовша можлива підпослідовність, яку можемо таким чином сформувати, це просто розмір більшої групи за парністю.

— Кількість непарних чисел від до дорівнює .

— Кількість парних чисел дорівнює .

Таким чином, відповідь:

\left\lceil \frac{n}{2} \right\rceil

Розв'язання виконується за часу на кожен тестовий випадок.

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

void solve(){
    int n;
    cin>>n;
    cout<<(n+1)/2;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin>>t;
    while(t--){
        solve();
        cout<<'\n';
    }
}