Maximum Multiple
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 541 Accepted Submission(s): 243
Problem Description
Given an integer n, Chiaki would like to find three positive integers x, y and z such that: n=x+y+z, x∣n, y∣n, z∣n and xyz is maximum.
Input
There are multiple test cases. The first line of input contains an integer T (1≤T≤106), indicating the number of test cases. For each test case:
The first line contains an integer n (1≤n≤106).
Output
For each test case, output an integer denoting the maximum xyz. If there no such integers, output −1 instead.
Sample Input
3 1 2 3
Sample Output
-1 -1 1
Source
2018 Multi-University Training Contest 1
签到题
打了个表,发现n%3==0的时候是均匀三份,n%4==0的时候是1:1:2
#include <bits/stdc++.h>
#define fir first
#define se second
#define pb push_back
#define ll long long
#define mp make_pair
using namespace std;
const int maxn=1e5+10;
const int maxm=1e6+10;
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;
const double eps=1e-7;
int check(int x){
int Max=-1;
for (int i=1;i<=x;i++){
if (x%i) continue;
for (int j=1;j<=x;j++){
if (x%j) continue;
for (int k=1;k<=x;k++){
if (x%k) continue;
if (i+j+k!=x) continue;
Max=max(Max,i*j*k);
}
}
}
return Max;
}
int main(){
/* for (int i=1;i<=40;i++){
cout<<i<<" "<<check(i)<<endl;
}*/
int t;
scanf("%d",&t);
while (t--){
int n;
scanf("%d",&n);
if (n%3==0){
ll temp=n/3;
printf("%lld\n",temp*temp*temp);
}
else if (n%4==0){
ll temp=n/4;
printf("%lld\n",temp*temp*temp*2);
}
else printf("-1\n");
}
}