мой код:
#include <iostream>;
#include <vector>;
#include <algorithm>;
#include <stdio.h>;
#include <string>;
#include <sstream>;
#include <cstring>;
using namespace std;
struct Info
{
int s, h, w, fs, fh, fw, sum, id;
};
char Check(vector<Info> a, int i);
int main() {
int n, m, k;
vector<int> vlad;
vector<Info> priziv;
vector<string> otvet;
cin >> n >> m >> k;
char str[] = "";
for (int i = 0; i < n;i++) {
int c;
for(int j =0; j < 6;j++)
{
cin >> c;
vlad.push_back(c);
}
Info priz;
priz.s = vlad[0];
priz.h = vlad[1];
priz.w = vlad[2];
priz.fs = vlad[3];
priz.fh = vlad[4];
priz.fw = vlad[5];
priz.id = i + 1;
priz.sum = max(priz.s, priz.fs) + max(priz.h , priz.fh) + max(priz.w,priz.fw);
priziv.push_back(priz);
vlad.clear();
}
sort(priziv.begin(), priziv.end(), [](const Info& a, const Info& b) {
return a.sum > b.sum;
});
int id = 0;
int count = 0;
while (k != 0 && id != priziv.size()) {
while (Check(priziv, id) != '.')
{
if (k != 0 && Check(priziv, id) == 's')
{
priziv[id].s = priziv[id].fs;
priziv[id].fs = 0;
string str = to_string(priziv[id].id);
string otv = "";
string klass = " STRENGTH";
otv += str;
otv += klass;
otvet.push_back(otv);
k--;
count++;
}
else if (k != 0 && Check(priziv, id) == 'h')
{
priziv[id].h = priziv[id].fh;
priziv[id].fh = 0;
string str = to_string(priziv[id].id);
string otv = "";
string klass = " HEIGHT";
otv += str;
otv += klass;
otvet.push_back(otv);
k--;
count++;
}
else if (k != 0 && Check(priziv, id) == 'w')
{
priziv[id].w = priziv[id].fw;
priziv[id].fw = 0;
string str = to_string(priziv[id].id);
string otv = "";
string klass = " WEIGHT";
otv += str;
otv += klass;
otvet.push_back(otv);
k--;
count++;
}
}
if (id == m) break;
id++;
}
for (int i = 0; i < n;i++) {
priziv[i].sum = priziv[i].s + priziv[i].h + priziv[i].w;
}
sort(priziv.begin(), priziv.end(), [](const Info& a, const Info& b) {
return a.sum > b.sum;
});
int summer = 0;
for (int i = 0; i < m; i++)
{
summer += priziv[i].sum;
vlad.push_back(priziv[i].id);
}
std::cout << summer << " ";
std::cout << count << "\n";
for (int i = 0; i < otvet.size();i++) {
std::cout << otvet[i] << "\n";
}
sort(vlad.rbegin(), vlad.rend());
for (int i = vlad.size() - 1; i >= 0;i--) {
std::cout << vlad[i] << " ";
}
}
char Check(vector<Info> a, int i)
{
int m1 = 0, m2 = 0, m3 = 0;
if (a[i].fs > a[i].s) m1 = a[i].fs - a[i].s;
if (a[i].fh > a[i].h) m2 = a[i].fh - a[i].h;
if (a[i].fw > a[i].w) m3 = a[i].fw - a[i].w;
if (m1 != 0 || m2 != 0 || m3 != 0)
{
int max1 = max(m1, m2), max2 = max(m2, m3);
int max3 = max(max1, max2);
if (m1 == max3)
{
return 's';
}
else if (m2 == max3)
{
return 'h';
}
else if (m3 == max3)
{
return 'w';
}
else
{
return '.';
}
}
else
{
return '.';
}
}
работает верно, но валится на больших тестах помогите разобраться!
Самое простое - чуть подправить сигнатуру функции Check
:
char Check(const vector<Info>& a, int i);
Тогда вектор не будет копироваться при каждом вызове.
Ну и вызывать Check
1 зраз за цикл, сохранив результат и используя его в последующих сравнениях:
char c = ' ';
while ('.' != c = Check(priziv, id)) {
if (k != 0 && c == 's') {
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем приветВозможнго, это вопрос не по шарпам, но так как пишу приложение на #, оставлю это здесь
Всем доброго времени суток, имеется форма на ней pictureBox1 и пара textBox, на pictureBox'е отрисовывается помещение, как можно взять значение из textBox'ов,...
Здравствуйте, вопрос заключается в следующем: как можно сохранять данные, введенные пользователем, не используя БД или их запись в файл? При...