У Арсения есть n зверьков. Каждый из них обладает характером, поэтому, если в клетке, где находится i-й зверек, есть не больше ci зверьков, то его агрессивность будет ai, а если больше, то его агрессивность будет bi (ai≤bi). Также у Арсения есть клетка прочностью s, которая выдержит зверьков, суммарная агрессивность которых не больше s.
Арсению выяснить, какое наибольшее число зверьков он может хранить в клетке одновременно.
Входные данные
В первой строке через пробел заданы два целых числа n и s (1≤n≤105,0≤s≤109).
В следующих n строках задана характеристика животных числами ai, bi и ci (0≤ai≤bi≤109,1≤ci≤n).
Выходные данные
Выведите единственное число — наибольшее количество животных, которое Арсений может одновременно хранить в клетке.
Примеры
входные данные
2 6
2 4 1
2 4 2
выходные данные
2
входные данные
4 10
3 4 2
3 5 3
1 1 1
2 7 3
выходные данные
3
204
266
Ответы на вопрос:
Код#include <iostream>#include <utility>#include <numeric>#include <vector>class Beast { int trigger; double aggression; double rage_aggression;public: Beast() = default; Beast(int trigger, double aggression, double range_aggression) : trigger(trigger), aggression(aggression), rage_aggression(range_aggression) { } Beast(const Beast&) = default; Beast(Beast&&) = default; Beast& operator=(const Beast&) = default; Beast& operator=(Beast&&) = default; [[nodiscard]] double calculate_aggression(unsigned long amount) const { return amount > trigger ? rage_aggression : aggression; } void ReadFrom (std::istream& is) { is >> aggression >> rage_aggression >> trigger; } void WriteTo(std::ostream &os) const { os << aggression << " " << rage_aggression << " " << trigger; }};std::istream& operator >>(std::istream &is, Beast &cls) { cls.ReadFrom(is); return is;}std::ostream& operator <<(std::ostream &os, const Beast &cls) { cls.WriteTo(os); return os;}class Cage { double durability; std::vector<Beast> container;public: explicit Cage(double durability, std::vector<Beast> container) : durability(durability), container(std::move(container)) { } Cage(const Cage&) = default; Cage(Cage&&) = default; Cage& operator=(const Cage&) = default; Cage& operator=(Cage&&) = default; [[nodiscard]] double calculate_aggressive() const { auto amount = container.size(); if (amount == 0) return 0; return std::accumulate(container.begin(), container.end(), 0.0, [amount](double total_aggressive, const Beast & beast){ return total_aggressive + beast.calculate_aggression(amount); }); } [[nodiscard]] bool is_it_normal() const { auto aggressive = calculate_aggressive(); return aggressive <= durability; } [[nodiscard]] int get_capacity() const { return container.size(); } [[nodiscard]] double get_durability() const { return durability; }};template <typename T>void subsetsUtil(std::vector<T>& A, std::vector<std::vector<T> >& res, std::vector<T>& subset, int index){ res.push_back(subset); for (int i = index; i < A.size(); i++) { // include the A[i] in subset. subset.push_back(A[i]); // move onto the next element. subsetsUtil(A, res, subset, i + 1); // exclude the A[i] from subset and triggers // backtracking. subset.pop_back(); }}template <typename T>std::vector<std::vector<T>> P(std::vector<T>& A){ std::vector<T> subset; std::vector<std::vector<T>> res; int index = 0; subsetsUtil(A, res, subset, index); return res;}int main () { int n, s; Beast noname{}; std::vector<Beast> set_of_beasts; std::cin >> n >> s; for (auto i = 0; i < n; ++i) { std::cin >> noname; set_of_beasts.push_back(noname); } auto selections = P(set_of_beasts); std::vector<Cage> variants; std::transform(selections.begin(), selections.end(), std::back_inserter(variants), [s](std::vector<Beast> &selection){ return Cage(s, selection); }); std::vector<Cage> true_variants; std::copy_if(variants.begin(), variants.end(), std::back_inserter(true_variants), [](Cage& x) {return x.is_it_normal();}); auto the_best_of_the_best_variant = *std::max_element(true_variants.begin(), true_variants.end(), [](Cage & s1, Cage & s2){ return s1.get_capacity() < s2.get_capacity(); }); std::cout << the_best_of_the_best_variant.get_capacity(); return 0;}
const n=5; var a: array [1..n] of integer; i, j, min: integer; begin for i: =1 to n do readln(a[i]); min: =10000; for i: =1 to n do if (a[i] div 100< > 0) and (a[i]< min) then min: =a[i]; writeln(min); end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
matematic1421.07.2021 22:37
-
Rtyrtya17.12.2022 01:47
-
ilonasusak7718.10.2022 20:51
-
2003stanislav29.01.2022 03:37
-
lei12321.01.2021 22:54
-
danadv29.06.2020 23:11
-
kz238828.02.2023 11:10
-
хорошийпарень227.06.2020 22:18
-
7klassnik104.01.2023 12:35
-
KUGOTVIN02.05.2020 08:29
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.