Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2016, 20:45   #1
_D4rki_
 
Регистрация: 17.10.2016
Сообщений: 9
По умолчанию Привести контрпример

Условие:
К 2112 году прогнозы погоды стали такими точными, что, когда Борис собрался купить себе новую куртку, он уже знал температуру ti в каждый из ближайших n дней. Борис может купить куртку, рассчитанную на любую температуру t, но если в какой-то из дней температура будет выше, то Борису будет жарко, а если ниже, то ему будет холодно. Некомфортностью набора дней d1, d2, ..., dm Борис называет разность между самым тёплым днём набора и самым холодным, то есть величину:

Из ближайших n дней Борис может выбрать любые k и взять в эти дни отпуск. Помогите ему вычислить, какой минимальной некомфортности набора оставшихся дней он может добиться.

Формат ввода

В первой строке входных данных записаны два числа n и k (0 ≤ k ≤ n ≤ 200000) — количество дней, для которых известен прогноз погоды, и количество дней, которые Борис может объявить днями отпуска, соответственно. Во второй строке записаны n целых чисел ti (-273 ≤ ti ≤ 109) — температура в соответствующие дни согласно прогнозу погоды.

Формат вывода

Выведите единственное целое число — минимальная некомфортность оставшихся дней, которую может получить Борис, взяв отпуск в какие-то k дней.

Пример 1

Ввод
7 2
-10 0 -5 30 4 2 3

Вывод
9

Пример 2

Ввод
2 0
15 19

Вывод
4

Примечания

В первом примере Борис возьмёт отпуск в первый и четвёртый дни.
Во втором примере у Бориса нет доступных для отпуска дней, поэтому значение некомфортности обязательно будет равно 19 - 15 = 4.

Мой код:
Код:
#include <iostream> 
#include <math.h> 
using namespace std;
template< class T >
void SortR(T* arr, int size)
{
    T tmp;
    for (int i = 1; i < size; ++i)
    {
        for (int j = 1; j < size; ++j)
        {
            if (arr[j + 1] < arr[j])
            {
                tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}
int main() {
    int n, k, a[200001];
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    SortR(a, n);
    int np = 1, vp = n;
    while (k != 0 && vp > 1) {
        
        if (abs(a[np]) > abs(a[vp]) && (a[vp] != 0)) {
            np++;
        }
        else {
            if (a[vp] >= 0)
                vp--; else np++;
        }
        k--;
    }
        cout << a[vp] - a[np];
    return 0;
}
Один из тестов не проходит. Помогите, пожалуйста, найти ошибку.
_D4rki_ вне форума Ответить с цитированием
Старый 01.11.2016, 23:49   #2
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

7 3
-10 0 0 30 0 0 0

Какой ответ?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привести контрпример _D4rki_ Помощь студентам 2 18.10.2016 17:58
Привести формулу к ДНФ Praud Помощь студентам 4 07.12.2014 19:08
Pascal контрпример - в трех тестах ошибка Izobara Помощь студентам 1 18.01.2013 11:22
Привести к 3 н.ф. базу данных leha_leha Фриланс 9 26.11.2012 21:37
Привести к общему знаменателю ParkWay Помощь студентам 0 07.06.2012 06:54