1.3Kпросмотров
21 августа 2024 г.
Score: 1.5K
Решение с объяснением:
#include <iostream>
#include <vector>
using namespace std; //вспомогательная функция рассчитывает кол-во различных мест внутри ящика
long long counter(const vector<long long>& v,const vector<long long>& rv){ long long result{}; if(v == rv) // если наш куб равен размеру ящика,то он вмещаеться только один раз return 1; for(long long i = v[1];i<=rv[1];++i){ // идем по длине result+=rv[0] - v[0] + 1; // каждую ширину в результат } int z = rv[2] - v[2] + 1; // высота return resultz;
} int main(){ int t;cin>>t; vector<long long> result; for(int d = 0;d<t;++d){ long long x,y,z,S;cin>>x>>y>>z>>S; long long maxValue{}; for(long long a = 1;a<=x;++a){ for(long long b = 1;b<=y;++b){ long long c = S/(ab); // можно сделать цикл от 1 до z - не проходит по рантайму // так как будут повторы a и b if(z>=c){ // если с не выходит за пределы if(abc == S ){ // если объем равен k ( в моем случае S) long long temp = counter({a,b,c},{x,y,z}); // создаю переменную // для хранения расчетов; // альтернативы: / 1. создать переменную в условии if 2. вызвать counter в присвоении и if функция будет вызываться по два раза / if(temp > maxValue) maxValue = temp; } } } } result.push_back(maxValue); // вносим в наш вектор наибольшее значение, // если такого не нашлось - выводим ноль } for(const auto& i: result){ // вывод cout<<i<<endl; }
}