Maximum MultipleTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2429 Accepted Submission(s): 1021 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:
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 |
看到数学公式就头疼的我,竟然能把这题AC掉,不可思议。
题意:略,简单粗暴。
思路:因为x∣n , y∣n , z∣n,不如设a=n/x,b=n/y,c=n/z,则又n=x+y+z,代入得到1/x+1/y+1/z=1。
分析方程,只有3组解(3,3,3),(4,2,2),(2,3,6) 。
因 ans=xyz=n^3/abc,若ans越大,则abc越小。
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
#include<queue>
#include<set>
#include<cmath>
#include<iomanip>
#include<stack>
#include<map>
#define N 1000011
#define LL long long int
using namespace std;
int main(){
int T;
int n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
LL ans=-1;
if(n%3==0){
ans=n/3;
ans=ans*ans*ans;
}
else if(n%4==0){
ans=n/4;
ans=ans*ans*ans*2;
}
cout<<ans<<endl;
}
}