#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 result*z;
}
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/(a*b); // можно сделать цикл от 1 до z - не проходит по рантайму
// так как будут повторы a и b
if(z>=c){ // если с не выходит за пределы
if(a*b*c == 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;
}
}
Решение с объяснением:
4August 21, 2024 1.4K 2