zoukankan      html  css  js  c++  java
  • CF449A Jzzhu and Chocolate

    Solution

    可以设横向切了 (x) 次,则纵着切了 (k-x) 刀,为使最小值最大化,所以要切的均匀。那么 (ans=leftlfloordfrac n{x+1} ight floorcdotleftlfloordfrac m{k-x+1} ight floor(0leq xleq k))

    因为 (leftlfloordfrac n{i} ight floor) 最多有 (sqrt n) 种取值,所以枚举找最小值即可。

    代码

    #include<bits/stdc++.h>
    #define ll long long
    
    using namespace std;
    ll n,m,k;
    
    ll solve(ll n,ll m,ll k){
        ll ans=1;
        for(int i=1,pre=0;i<=n;i=pre+1){
            pre=n/(n/i);
            if(pre>k+1){
                ans=max(ans,n/(k+1)*m);
                break;
            }
            ans=max(ans,(n/pre)*(m/(k-pre+2)));
        }
        return ans;
    }
    
    int main(){
        while(~scanf("%lld%lld%lld",&n,&m,&k)){
            if(k>n+m-2) puts("-1");
            else printf("%lld
    ",solve(n,m,k));
        }
        return 0;
    }
    
  • 相关阅读:
    并查集
    CCF201604-02
    作业八
    作业七
    数据结构--链队列基本操作
    数据结构--栈的基本操作
    eclipse配置maven
    软件架构
    scala lambda 表达式 & spark RDD函数操作
    spark(3)
  • 原文地址:https://www.cnblogs.com/jasony/p/13843210.html
Copyright © 2011-2022 走看看