zoukankan      html  css  js  c++  java
  • hdu 5646

    题目hdu 5646

    题意
    给出整数n,k,求n的k个划分,使得k个数乘积最大

    分析
    要想乘积最大,而且所有的数不同。首先想到的就是所有的数在平均值两边,即在n/k两边,剩下n%k就要往右边补了。基本的思路是这样,实现起来为了保持都不一样,先给1-k个数附上1-k的数值,剩下的n-k*(k+1)/2,然后平均分上,多余的分到最后。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    int main()
    {
        int T; cin>>T;
        while(T--){
            ll n,k;
            cin>>n>>k;
            ll minn=k*(k+1)/2;
            if(minn>n){
                printf("-1
    ");continue;
            }
            n-=minn;
            int p=n/k, sh=n%k;
            ll ans=1;
            for(int i=1;i<=k;i++){
                ans=ans*(i+p+(k-i+1<=sh?1:0))%mod;
            }
            cout<<ans<<endl;
        }
    }
  • 相关阅读:
    python
    car-travel project
    数据库
    kafka笔记
    cloudera笔记
    上课笔记
    structured streaming
    SparkSQL
    流数据
    spark厦门大学
  • 原文地址:https://www.cnblogs.com/01world/p/5651265.html
Copyright © 2011-2022 走看看