Информатика, вопрос задал QueenWhite , 2 года назад

Решите задачу на C++

Однажды Вася попал на распродажу старых телевизоров. Всего на
распродаже n телевизоров. Цена телевизора номер i — a монет. Причем часть телевизоров имеет отрицательную цену — их хозяева готовы сами заплатить Васе за то, что он избавит их от ненужной техники. Вася может «купить» любые телевизоры, какие захочет. Но хоть он и очень сильный, Вася может унести не больше m телевизоров, а возвращаться на распродажу второй раз у него нет
желания. Помогите Васе: найдите наибольшую сумму денег, которую он сможет заработать.

Входные данные:
В первой строке через пробел записано два целых числа n и m (1 ≤ m ≤ n ≤ 100) — количество телевизоров на распродаже и количество телевизоров, которое может унести Вася. На следующей строке через пробел записано n целых чисел a ( -1000 ≤ a ≤ 1000) — цены телевизоров.

Выходные данные:
Выведите одно число — максимальную сумму денег, которую заработает Вася, если он может унести не больше m телевизоров.

Примеры:

Входные данные:
5 3
-6 0 35 -2 4
Выходные данные:
8

Входные данные:
4 2
7 0 0 -7
Выходные данные:
7

Ответы на вопрос

Ответил CAYFER
0

#include <iostream>

#include <vector>

#include <map>

#include <set>

#include <string>

#include <algorithm>

#include <math.h>

#define ll long long

#define x first

#define y second

#define pll pair<ll,ll>

#define pii pair<int,int>

using namespace std;

void solve() {

   int n, m; cin >> n >> m;

   vector<int> a(n);

   for(int i = 0; i < n; i++){

       cin >> a[i];

   }

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

   int sum = 0;

   for(int i = 0; i < n; i++){

       if(a[i] >= 0) break;

       if(m == 0) break;

       sum += abs(a[i]);

       m--;

   }

   cout << sum << endl;

}

int main(){

   ios_base::sync_with_stdio(false);

   cin.tie(NULL);

   //ll t; cin >> t; while(t--)

   solve();

}

Новые вопросы