Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3633856
А
Аноним
05 сентября 2026 11:27 · публичный вопрос
А
Аноним

Виктор работает в сервисе по ремонту клавиатур. Чаще всего ремонт заключается в переключении тумблера с положения OFF в ON, из-за этого Виктор уже заскучал. Но однажды ему…

Запрос пользователя

Виктор работает в сервисе по ремонту клавиатур. Чаще всего ремонт заключается в переключении тумблера с положения OFF в ON, из-за этого Виктор уже заскучал. Но однажды ему принесли сломанную клавиатуру с неизвестной раскладкой. Виктор подключил клавиатуру к компьютеру и зашёл в текстовый редактор. Он стал нажимать различные клавиши из-за чего на экране в текстовом редакторе стали печататься неизвестные символы. Тогда Виктор использовал специальный анализатор, который напрямую считывает код нажатой клавиши, а также произвольно пронумеровал клавиши самой клавиатуры. Виктор решил, что хоть он и не знает правильной нумерации, всё равно можно оценить работоспособность клавиатуры. Для этого Виктор придумал численный коэффициент работоспособности клавиатуры. Для вычисления этого коэффициента Виктор нажимает произвольные клавиши на клавиатуре и записывает соответствующие полученные коды от анализатора. Так как правильное сопоставление неизвестно, то сравнивать номера и коды клавиш напрямую нельзя, поэтому Виктор решил анализировать нажатия попарно. Хорошей парой нажатий Виктор называет такую пару ( ( k i , c i ) i , ( k j , c j ) j ) , в которой совпадают и номера k i = k j , и коды c i = c j клавиш. Почти хорошая пара нажатий — пара ( ( k i , c i ) i , ( k j , c j ) j ) , в которой не совпадают и номера k i ≠ k j , и коды c i ≠ c j клавиш. Плохая пара нажатий — пара ( ( k i , c i ) i , ( k j , c j ) j ) , в которой совпадают номера k i = k j , но не совпадают коды c i ≠ c j клавиш. Почти плохая пара нажатий — пара ( ( k i , c i ) i , ( k j , c j ) j ) , в которой не совпадают номера k i ≠ k j , но совпадают коды c i = c j клавиш. Пусть G — число хороших пар нажатий клавиш, P — число почти хороших пар, B — число плохих пар, а N — число почти плохих пар. Тогда коэффициент работоспособности клавиатуры равен: √ G + √ P √ B + √ N Если √ B + √ N = 0 , то клавиатура считается полностью рабочей, поэтому численное значение коэффициента не имеет смысл. Формат входных данных Первая строка содержит натуральное число N ( 2 ≤ N ≤ 10 5 ) — число нажатий. Вторая строка содержит N натуральных чисел k i ( 1 ≤ k i ≤ 10 9 ) — номера нажатых клавиш. Третья строка содержит N натуральных чисел c i ( 1 ≤ c i ≤ 10 9 ) — коды соответствующих клавиш. Формат выходных данных Выведите значение коэффициента работоспособности клавиатуры, либо -1, если клавиатура полностью рабочая. Ответ будет засчитан, если его абсолютная или относительная погрешность не будет превышать 10 − 9 .

Ответ нейросети
05 сентября 2026 11:27

Краткий ответ

Пусть:

  • \(S_k\) — число пар нажатий с одинаковыми номерами клавиш;
  • \(S_c\) — число пар с одинаковыми кодами;
  • \(G\) — число пар с одновременно одинаковыми номерами и кодами.

Тогда:

\[ B=S_k-G, \qquad N=S_c-G, \]

\[ P=\binom{n}{2}-S_k-S_c+G. \]

После этого вычисляем

\[ \frac{\sqrt G+\sqrt P}{\sqrt B+\sqrt N}. \]

Если \(B=N=0\), выводим \(-1\).

Почему это работает

Для группы из \(t\) одинаковых значений число пар внутри неё равно:

\[ \binom{t}{2}=\frac{t(t-1)}2. \]

Поэтому:

  • сортируем номера \(k_i\) и считаем пары одинаковых номеров;
  • сортируем коды \(c_i\) и считаем пары одинаковых кодов;
  • сортируем пары \((k_i,c_i)\) и считаем хорошие пары \(G\).

Почти хорошие пары — это пары, у которых различаются и номера, и коды. Из всех пар исключаем пары с одинаковым номером или одинаковым кодом:

\[ P=\binom{n}{2}-(G+B)-(G+N)+G =\binom{n}{2}-S_k-S_c+G. \]

Решение на C++17

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

long long countEqualPairs(vector<long long> values) {
    sort(values.begin(), values.end());

    long long result = 0;
    int n = static_cast<int>(values.size());

    for (int i = 0; i < n; ) {
        int j = i + 1;
        while (j < n && values[j] == values[i]) {
            ++j;
        }

        long long cnt = j - i;
        result += cnt * (cnt - 1) / 2;
        i = j;
    }

    return result;
}

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

    int n;
    cin >> n;

    vector<long long> k(n), c(n);

    for (long long &x : k) {
        cin >> x;
    }
    for (long long &x : c) {
        cin >> x;
    }

    long long sameK = countEqualPairs(k);
    long long sameC = countEqualPairs(c);

    vector<pair<long long, long long>> both(n);
    for (int i = 0; i < n; ++i) {
        both[i] = {k[i], c[i]};
    }

    sort(both.begin(), both.end());

    long long good = 0;

    for (int i = 0; i < n; ) {
        int j = i + 1;
        while (j < n && both[j] == both[i]) {
            ++j;
        }

        long long cnt = j - i;
        good += cnt * (cnt - 1) / 2;
        i = j;
    }

    long long totalPairs = 1LL * n * (n - 1) / 2;

    long long bad = sameK - good;
    long long almostBad = sameC - good;
    long long almostGood = totalPairs - sameK - sameC + good;

    if (bad == 0 && almostBad == 0) {
        cout << -1 << '\n';
        return 0;
    }

    long double numerator =
        sqrtl(static_cast<long double>(good)) +
        sqrtl(static_cast<long double>(almostGood));

    long double denominator =
        sqrtl(static_cast<long double>(bad)) +
        sqrtl(static_cast<long double>(almostBad));

    long double answer = numerator / denominator;

    cout << fixed << setprecision(15) << answer << '\n';

    return 0;
}

Сложность решения:

\[ O(n\log n) \]

по времени и \(O(n)\) по памяти.

Обсуждение

5 сообщений
А
Аноним

Профессор перед экзаменом попросил ассистента подготовить список номеров вопросов для каждого студента. Так как профессор планирует подробно спрашивать материал курса, то каждый список представляет собой перестановку всех номеров вопросов. Профессору не понравилось, что иногда в списке похожие темы встречаются близко к друг другу. Тогда он решил перемешать каждый список вопросов по следующим правилам: первый номер вопроса в новом списке совпадает с первым номером из старого списка; каждый последующий номер выбирается так, чтобы он максимизировал минимальное расстояние до уже выбранных номеров, если таких номеров несколько, то выбирается тот, который идёт раньше в старом списке вопросов. Попытавшись перемешать номера вопросов в одном из списков по описанным правилам, профессор понял, что не успеет перемешать все списки до экзамена. Помогите ему решить эту задачу. Формат входных данных В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка. Формат выходных данных Выведите N натуральных чисел — номера вопросов в новом списке.

А
Аноним

Профессор перед экзаменом попросил ассистента подготовить список номеров вопросов для каждого студента. Так как профессор планирует подробно спрашивать материал курса, то каждый список представляет собой перестановку всех номеров вопросов. Профессору не понравилось, что иногда в списке похожие темы встречаются близко к друг другу. Тогда он решил перемешать каждый список вопросов по следующим правилам: первый номер вопроса в новом списке совпадает с первым номером из старого списка; каждый последующий номер выбирается так, чтобы он максимизировал минимальное расстояние до уже выбранных номеров, если таких номеров несколько, то выбирается тот, который идёт раньше в старом списке вопросов. Попытавшись перемешать номера вопросов в одном из списков по описанным правилам, профессор понял, что не успеет перемешать все списки до экзамена. Помогите ему решить эту задачу. Формат входных данных В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка. Формат выходных данных Выведите N натуральных чисел — номера вопросов в новом списке.

А
Аноним

Представьте, что вы продаете товар на Авито - гитару, чемодан или настольную игру. Покупатель хочет знать, сколько будет стоить доставка, а маркетплейс должен посчитать это автоматически и точно. Ваша задача - научить модель по данным об объявлении (текст + характеристики + фото) предсказывать четыре величины: вес, высоту, ширину и длину товара. Чем точнее предсказания, тем корректнее стоимость доставки и тем меньше неприятных сюрпризов на пункте выдачи. Задание: Автоматический точный расчёт стоимости доставки для продавцов и покупателей Авито подразумевает, что необходимо заранее предсказывать индивидуальные весогабаритные характеристики (ВГХ) товара по его описанию и фото. Для этого постройте модель, которая для каждого объекта из тестовой выборки предсказывает четыре непрерывные величины: target_weight - вес (кг), target_height - высота (см), target_width - ширина (см), target_length - длина (см). Данные: train.parquet - обучающая выборка, test.parquet - тестовая выборка, sample_submission.csv - шаблон отправки, train.zip и test.zip - изображения товаров (ровно 1 фото на товар). Все данные можно скачать из Облака Тренировочный набор train.parquet с колонками: item_id - уникальный ID товара, order_date - дата оформления заказа, item_condition - состояние товара, item_price - цена, ₽, category_name, subcategory_name, microcat_name - иерархия категорий (ур. 1/2/3), seller_id, buyer_id - ID продавца/покупателя, title, description - заголовок и описание объявления, image_name - имя изображения, соответствует объекту в train.zip. Таргеты: real_weight (кг), real_height (см), real_width (см), real_length (см). Тестовая выборка: test.parquet - те же признаки, без таргетов. Метрика В качестве метрики качества используется Macro Log-MAE. Считаем MAE в лог-шкале по каждому таргету и усредняем: LogMAE t = 1 N ∑ N i = 1 ∣ ∣ log ( 1 + y i , t ) − log ( 1 + ^ y i , t ) ∣ ∣ , Score = 1 4 ∑ t ∈ { weight,height,length,width } LogMAE t , где y i , t - истинное значение, ^ y i , t - предсказание. Система оценки Промежуточный балл, отображаемый в таблице результатов до момента завершения раунда, рассчитывается по формуле: Score = 1 / (1 + LogMAE), где LogMAE - значение метрики, рассчитанное по указанной выше формуле Окончательное количество баллов за задание определяется по формуле: Points = 200 ⋅ percentileofscore(Scores, Score), где Points – количество баллов. percentileofscore – функция, вычисляющая percentile rank, Scores – промежуточные баллы, подсчитанные по метрике LogMAE для всех участников, Score – промежуточный балл, подсчитанный по метрике LogMAE данного участника. При расчете баллов используются значения метрики участников, чьи решения показали результат лучше, чем приложенный пример ответа (sample_submission.csv) на задачу. Решения с метрикой ниже или равной значению, полученному с помощью примера, оцениваются в 0 баллов. Файлы sample_submission.csv 1.84 Мб test.parquet 19.61 Мб train.parquet 70.18 Мб

А
Аноним

Профессор перед экзаменом попросил ассистента подготовить список номеров вопросов для каждого студента. Так как профессор планирует подробно спрашивать материал курса, то каждый список представляет собой перестановку всех номеров вопросов. Профессору не понравилось, что иногда в списке похожие темы встречаются близко к друг другу. Тогда он решил перемешать каждый список вопросов по следующим правилам: первый номер вопроса в новом списке совпадает с первым номером из старого списка; каждый последующий номер выбирается так, чтобы он максимизировал минимальное расстояние до уже выбранных номеров, если таких номеров несколько, то выбирается тот, который идёт раньше в старом списке вопросов. Попытавшись перемешать номера вопросов в одном из списков по описанным правилам, профессор понял, что не успеет перемешать все списки до экзамена. Помогите ему решить эту задачу. Формат входных данных В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка. Формат выходных данных Выведите N натуральных чисел — номера вопросов в новом списке.

А
Аноним

Профессор перед экзаменом попросил ассистента подготовить список номеров вопросов для каждого студента. Так как профессор планирует подробно спрашивать материал курса, то каждый список представляет собой перестановку всех номеров вопросов. Профессору не понравилось, что иногда в списке похожие темы встречаются близко к друг другу. Тогда он решил перемешать каждый список вопросов по следующим правилам: первый номер вопроса в новом списке совпадает с первым номером из старого списка; каждый последующий номер выбирается так, чтобы он максимизировал минимальное расстояние до уже выбранных номеров, если таких номеров несколько, то выбирается тот, который идёт раньше в старом списке вопросов. Попытавшись перемешать номера вопросов в одном из списков по описанным правилам, профессор понял, что не успеет перемешать все списки до экзамена. Помогите ему решить эту задачу. Формат входных данных В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка.