CodeForces 449 A.Jzzhu and Chocolate(枚举)

来源:互联网 发布:知乎无法提交答案 编辑:程序博客网 时间:2024/06/06 13:16

Description
一个n*m的网格,在网格线上横纵共切k刀,使得分成小块的面积最小值最大化
Input
三个整数n,m,k(1<=n,m<=1e9,1<=k<=2e9)
Output
输出最大化的面积最小值
Sample Input
3 4 1
Sample Output
6
Solution
设横着x刀,则纵着k-x刀,为使最小值最大化显然要尽量均匀切,那么这样切得到的面积最小值应该为
这里写图片描述
由于这里写图片描述取值至多这里写图片描述种,所以枚举这里写图片描述的值求出对应的最小面积并从中取最小值即为答案
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;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(){    ll n,m,k;    while(~scanf("%I64d%I64d%I64d",&n,&m,&k))    {        if(k>n+m-2)printf("-1\n");        else printf("%I64d\n",Solve(n,m,k));    }    return 0;}
0 0