• B. Очистка данных
    Ограничение времени: 1.0 секунды
    Ограничение памяти: 64 МБ
    Прежде чем применить к данным методы машинного обучения, проводится процесс очистки данных. Необходимость очистки связана с тем, что в данных могут быть аномальные элементы: дубли, ошибки ввода и выбросы. Если очистка данных не будет выполнена, то методы анализа данных могут дать неправильный результат!
    Рассмотрим интеллектуальную систему предсказания погоды. Такая система постоянно получает данные о текущей температуре воздуха с множества метеостанций. Каждая метеостанция передает последовательно данные о температуре в виде пары целых чисел. Первое число – это время, которое измеряется количеством секунд, прошедших с начала суток. Второе число – это температура в градусах Цельсия.
    Очистка данных производится в три этапа. Сначала удаляются дубли – когда информация об одном и том же времени измерения и той же температуре воздуха повторилась несколько раз подряд (первый элемент в такой последовательности одинаковых данных дублем не считается). После удаления дублей из последовательности удаляются ошибки ввода времени - когда время в новой паре не превосходит время в предыдущей паре или превышает количество секунд в сутках. На третьем этапе из последовательности удаляются выбросы – пары с аномальным значением температуры, когда измеренная температура по модулю больше 40 градусов или отличается от предыдущего значения более чем на 10 градусов. Вам нужно написать программу, которая будет определять в исходной последовательности данных количество удаляемых дублей, выбросов и ошибок. Можете считать, что самая первая пара в последовательности не относится к аномальным.
    Исходные данные
    В первой строке входных данных записано целое число n – количество измерений (1 ≤ n ≤103). В следующих n строках записаны целые числа t и T, разделенные пробелом – время измерения и значение температуры воздуха. Все числа по модулю не превосходят 109.
    Результат
    Выведите три целых числа, разделенных пробелами – количество дублей, ошибок ввода времени и выбросов в последовательности исходных данных.
    Пример
    исходные данные результат

    6
    10 5
    8 5
    8 5
    8 5
    12 25
    13 10



    2 1 1

    Замечания
    8 5 дублируется трижды. После удаления двух копий остается одна пара 8 5, которая является ошибкой ввода (т.к. время 8 меньше 10 из предыдущей пары). После ее удаления остается последовательность из трех пар 10 5, 12 25, 13 10, в которой 12 25 – выброс (t = 25 более чем на 10 превышает 5). После удаления выброса остается очищенная последовательность 10 5, 13 10
    В этой задаче есть тесты, в которых присутствуют только дубли (суммарно 20 баллов), ошибки ввода (также 20 баллов) и выбросы (еще 20 баллов). Оставшиеся тесты включают разные типы аномальных элементов (40 баллов).

Ответы 1

  • PascalABC.NET 3.4.2, сборка 1884 от 24.11.2018Внимание! Если программа не работает, обновите версию!

    begin

     var n := ReadInteger;

     var L := new List<(integer, integer)>;

     loop n do

     begin

       L.Add(ReadInteger2)

     end;

     var k := L.Count;

     L := L.Distinct.ToList; // этап 1

     var k1 := L.Count;

     Print(k - k1);

     (k, k1) := (k1, 0); // этап 2

     var St := new Stack<integer>;

     var m := L.First[0]; // время

     for var i := 1 to k - 1 do

       if L[i][0] <= m then

       begin

         St.Push(i);

         Inc(k1)

       end

       else m := L[i][0];

     for var i := 1 to k1 do

       L.RemoveAt(St.Pop);

     Print(k1);

     (k, k1) := (L.Count, 0); // этап 3

     m := L.First[1]; // температура

     for var i := 1 to k - 1 do

       if Abs(L[i][1] - m) > 10 then

       begin

         St.Push(i);

         Inc(k1)

       end

       else m := L[i][1];

     for var i := 1 to k1 do

       L.RemoveAt(St.Pop);

     Println(k1);

    end.

    Пример610 58 58 58 512 2513 102 1 1
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years