C/C++

Программа на с++

Нужно на c++ Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел делилась на 11 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи.
Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество троек N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.
Пример входного файла:
6
8 3 4
4 8 12
9 5 6
2 8 3
12 3 5
1 4 12
Для указанных входных данных значением искомой суммы должно быть число 22.
В ответе укажите два числа: сначала искомое значение для файла А, затем для файла B.
Ответ 5896 14078757
#include <algorithm>
#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
class Item {
public:
Item() = default;
Item(const string& s) {
istringstream iss(s);
unsigned n;
while (iss >> n) item.push_back(n);
sort(item.begin(), item.end());
}
const vector<unsigned>& data()const {
return item;
}
private:
vector<unsigned> item;
friend bool operator<(const Item& a, const Item& b) {
return a.item < b.item;
}
};
class Box {
public:
bool load(string&& path) {
ifstream file(path);
if (file.is_open()) {
unsigned n;
file >> n;
if (!n || n > 100000) {
file.close();
return false;
}
string s;
while (getline(file, s)) if (!s.empty()) box.emplace(Item(s));
file.close();
return true;
}
return false;
}
unsigned msf()const {
auto sum = 0U;
for (const auto& item : box) sum += item.data().at(0);
return sum;
}
unsigned work(const unsigned smn, const unsigned n)const {
if (0 == smn % n) return smn;
for (const auto& item : box) {
auto x = smn - item.data().at(0);
auto sum = x + item.data().at(1);
if (0 == sum % n) return sum;
sum = x + item.data().at(2);
if (0 == sum % n) return sum;
}
return 0;
}
private:
multiset<Item> box;
};
int main() {
const auto x = 11U;
Box a;
if (a.load("A")) {
auto smn = a.msf();
auto res = a.work(smn, x);
if (res) cout << res << ' ';
}
Box b;
if (b.load("B")) {
auto smn = b.msf();
auto res = b.work(smn, x);
if (res) cout << res;
}
puts("");
system("pause > nul");
}
Денис Казарин
Денис Казарин
62 072
Лучший ответ
Полетаев Эдуард Ваше решение не работает.

Вот пример входных данных.

6
5 6 7
4 7 12
2 5 14
2 8 13
3 12 15
1 12 14
Бяда
Алексей Галустян у меня есть решение подобия этой программы с другим условием, но тип задачи такой же