HDU 6298.Maximum Multiple-数学思维题(脑子是个好东西,可惜我没有) (2018 Multi-University Training Contest 1 1001)

暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了。。。

 

2018 Multi-University Training Contest 1

 

 

HDU6298.Maximum Multiple

 

题目意思就是给你一个n,找出来三个数x,y,z, 使得n=x+y+z,而且x,y,z都是n的因数,并且x*y*z为最大值,让你输出来x*y*z的最大值。如果没有满足条件的情况就输出-1。

由1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4,所以只需要判断n能否被3和4整除就可以,但是自己智障,判的是能否被2和3整除,简直是蠢到南天门的操作,当时想的就是能被4整除的肯定也能被2整除,我直接判2就可以,但是并没有想反过来是不是成立的,这是个充分不必要条件啊,能被2整除的不一定能被4整除啊,eg:10,mdzz。。。

其他的没什么,这是个水题,但是我们卡了。。。

 

代码:

 1 //1001-数学思维题 脑子是个好东西可惜我没有。
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<cctype>
 8 #include<cstdlib>
 9 #include<queue>
10 #include<vector>
11 #include<map>
12 #include<stack>
13 #include<set>
14 using namespace std;
15 typedef long long ll;
16 const int maxn=1e5+10;
17 
18 int main()
19 {
20     int t;
21     while(~scanf("%d",&t)){
22         while(t--){
23             int n;
24             ll ans=-1;
25             scanf("%d",&n);//1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4
26             if(n%4==0&&n%3==0) ans=(1ll)*(n/2)*(n/3)*(n/6);
27             if(n%4==0) ans=max(ans,(1ll)*(n/2)*(n/4)*(n/4));
28             if(n%3==0) ans=max(ans,(1ll)*(n/3)*(n/3)*(n/3));
29             cout<<ans<<endl;
30         }
31     }
32 }

 

posted @ 2018-07-25 10:39  ZERO-  阅读(530)  评论(0编辑  收藏  举报