#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';
}
Входные данные:
Вводится натуральное число n – количество товаров на складе. Далее вводятся n строк с категорией и весом (в килограммах). В каждой из таких строк идет сначала категория (заглавная латинская буква), потом пробел, потом вес товара (натуральное число).
Выходные данные:
Вывести одно число – максимальное количество товаров (в штуках) категории «С», которые может перевезти фирма за один раз (общий вес товаров не должен превышать 30000 кг.).
Так, например, если программе на вход будут поданы следующие данные:
7
C 1200
A 20000
B 15000
C 1500
C 25000
C 18000
C 1000,
то она должна вывести число 4.