杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,

Posted Persistent.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,相关的知识,希望对你有一定的参考价值。

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

 

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 }

 

以上是关于杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,的主要内容,如果未能解决你的问题,请参考以下文章

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1008.RMQ Similar Sequence (HDU6305) -笛卡尔树+数学期望

2019.07.222019杭电多校第一场

2019 杭电多校第一场

2019杭电多校第一场

2022杭电多校第一场01

2022杭电多校第一场01