杭电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) -笛卡尔树+数学期望