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*m); continue; } if(k>n+m-2){ printf("-1 "); 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 ",a); } return 0; } 复制代码