• 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 }
  • 相关阅读:
    Windows10 ntoskrnl.exe占用大量的磁盘空间(100%)
    Windows10 正式企业版激活
    edit-distance
    climbing-stairs
    minimum-path-sum
    unique-paths-II
    unique-paths
    剑指 Offer 42. 连续子数组的最大和
    剑指 Offer 54. 二叉搜索树的第k大节点
    矩阵中的路径
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9364600.html
Copyright © 2020-2023  润新知