Форум программистов, компьютерный форум CyberForum.ru

Задача о стульях - C++

Восстановить пароль Регистрация
 
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
20.01.2016, 20:44     Задача о стульях #1
Итак, следуя хорошей манере создавать по теме на задачу, продолжим.

 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.


Вот сама задача:
«Где бы выгодно купить стулья, а потом выгодно их продать» — думал Остап после неудачной погони за 12 стульями.
Он решил подзаработать себе на билет до Рио продажей мебели. Прежде чем начать работу, он решил понаблюдать за происходящим и придумать, как побольше заработать.
Остап узнал, что в городе все продавцы продают только по одному стулу, и каждый покупатель готов купить не более одного. Всего он нашел N предложений, стоимость стула у i-го из продавцов равна Ai рублей, конечно, цены могут отличаться. Кроме того, он нашёл M потенциальных покупателей, каждый из которых может купить стул не дороже Bi рублей. При этом сам Остап может купить и продать любое количество товара.
Остап хочет получить наибольшую прибыль, поэтому он обратился за помощью к вам. Определите максимальную прибыль, которую он может получить.

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

Первая строка входных данных содержит два целых числа N, M (1 ≤ N, M ≤ 105) — количество предложений и количество потенциальных покупателей соответственно.

Вторая строка содержит N целых чисел Ai (0 ≤ Ai ≤ 109) цены, по которым продавцы готовы продавать стулья.

Третья строка содержит M целых чисел Bi (0 ≤ Bi ≤ 109) суммы, которые потенциальные покупатели готовы отдать при покупке стула.

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

Выведите одно целое число равное максимальной прибыли, которую Остап может получить.

Пример:

Ввод:
6 5
5 10 8 4 7 2
3 1 11 18 9

Вывод:
27
Вот мое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm> 
#include <functional>
 
using namespace std;
 
int main()
{
    ifstream input("input.txt");
 
    int sellersNumber = 0;
    int buyersNumber = 0;
 
    input >> sellersNumber;
    input >> buyersNumber;
 
    vector<int> sellPrices(sellersNumber);
    vector<int> buyPrices(buyersNumber);
 
    for (int i = 0; i < sellersNumber; i++)
    {
        input >> sellPrices[i];
    }
 
    for (int i = 0; i < buyersNumber; i++)
    {
        input >> buyPrices[i];
    }
 
    input.close();
 
    sort(sellPrices.begin(), sellPrices.end());
    sort(buyPrices.begin(), buyPrices.end(), std::greater<int>());
 
    int result = 0;
    int minRange = min(sellPrices.size(), buyPrices.size());
 
    for (int i = 0; i < minRange; i++)
    {
        int profit = buyPrices[i] - sellPrices[i];
        if (profit > 0)
        {
            result += profit;
        }
    }
 
    ofstream output("output.txt");
    output << result;
    output.close();
 
    return 0;
}
логика простецкая: мы не можем получить прибыль покупая дороже чем продаем. В системе проходит 19 тестов, после чего падает. Что я делаю не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
21.01.2016, 10:16  [ТС]     Задача о стульях #2
Добавлено через 56 минут
Закрывайте тему, я разобрался где накосячил.

Значение результата должно было быть типа long long int, чтобы вместить в себя нужный диапазон значений. Поверить не могу, что мог на этом проколоться.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
21.01.2016, 10:21     Задача о стульях #3
Цитата Сообщение от Fennec Посмотреть сообщение
логика простецкая
Цитата Сообщение от Fennec Посмотреть сообщение
Значение результата должно было быть типа long long int, чтобы вместить в себя нужный диапазон значений
Fennec, так что не логикой единой! Чуйку надо иметь!
Yandex
Объявления
21.01.2016, 10:21     Задача о стульях
Ответ Создать тему
Опции темы

Текущее время: 00:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru