Codeforces Round #257 (Div. 2)

C这题说的是给了一个 矩形然后可以在矩形中切来切去 问最后那个最小块的最大面积 可以推出公式 (n/(x+1))*(m/(y+1)) x y 分别是横切个纵切的刀数, 可以通过解二元函数算出极值 ,须要取整比赛的时候就把这种方法给去掉了 悲 活该绿名

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
__int64 n,m,k;
__int64 maxv(__int64 a, __int64 b)
{
      return a>b?a:b;
}
__int64 minv(__int64 a,__int64 b)
{
      return a>b?b:a;
}
int main()
{
       while(scanf("%I64d%I64d%I64d",&n,&m,&k)==3)
       {
            __int64 L = maxv(0,k-m+1);
            __int64 R = minv(k,n-1);
            if(k==0){
                 printf("%I64d\n",n*m); continue;
            }
            if(k>n+m-2){
                 printf("-1\n"); continue;
            }
            __int64 a = (n/(L+1))*(m/(k-L+1));
            __int64 b = (n/(R+1))*(m/(k-R+1));
            a =maxv(a,b);
            printf("%I64d\n",a);
       }
       return 0;
}
复制代码
View Code
posted @ 2014-08-25 15:09  来自大山深处的菜鸟  阅读(114)  评论(0编辑  收藏  举报