Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на С++ СРОЧНО!!!!

Егор Федулаев Ученик (101), закрыт 1 месяц назад
У фирмы «Орион» на складе хранятся товары различных категорий. Существует список с данными о весе и категории товаров склада. Фирме необходимо перевезти максимальное количество (в штуках) товаров категории «С». При этом она может сделать одну перевозку общим весом в 30000 кг. Напишите программу, которая определит, какое максимальное количество товаров требуемой категории сможет перевезти фирма за один раз.

Входные данные:

Вводится натуральное число n – количество товаров на складе. Далее вводятся n строк с категорией и весом (в килограммах). В каждой из таких строк идет сначала категория (заглавная латинская буква), потом пробел, потом вес товара (натуральное число).

Выходные данные:

Вывести одно число – максимальное количество товаров (в штуках) категории «С», которые может перевезти фирма за один раз (общий вес товаров не должен превышать 30000 кг.).

Так, например, если программе на вход будут поданы следующие данные:
7
C 1200
A 20000
B 15000
C 1500
C 25000
C 18000
C 1000,
то она должна вывести число 4.
Лучший ответ
Николай Веселуха Высший разум (365750) 1 месяц назад
 #include  
#include

using namespace std;

class Cargo {
public:
using name_t = char;
using weight_t = unsigned;
using product_t = pair;
using count_t = unsigned;
Cargo(const name_t& name, const weight_t max)
: name(name), max(max), weight(0), total(0) {}
count_t max_count() const {
return total;
}
void add(const product_t& product) {
const auto& [name, weight] = product;
if (this->name != name || weight > max) return;
box.insert(weight);
this->weight += weight;
if (this->weight > max) {
pop_back();
return;
}
++total;
}
private:
const name_t name;
const weight_t max;
weight_t weight;
count_t total;
multiset box;
void pop_back() {
const auto it = prev(box.end());
weight -= *it;
box.erase(it);
}
};

int main() {
Cargo cargo{ 'C', 30000 };
Cargo::count_t n;
cin >> n;
Cargo::product_t product{};
for (Cargo::count_t i = 0; i < n; ++i) {
cin >> product.first >> product.second;
cargo.add(product);
}
const auto count = cargo.max_count();
cout << count << '\n';
}
Остальные ответы
GS HS Ученик (247) 1 месяц назад
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
int n;
std::cin >> n;
std::vector<int> weights;
for (int i = 0; i < n; ++i) {
char category;
int weight;
std::cin >> category >> weight;
if (category == 'C') {
weights.push_back(weight);
}
}
std::sort(weights.begin(), weights.end());
int total_weight = 0;
int count = 0;
for (int weight : weights) {
if (total_weight + weight <= 30000) {
total_weight += weight;
++count;
} else {
break;
}
}
std::cout << count << std::endl;
return 0;
}
Похожие вопросы