CodeForces 449AJzzhu and Chocolate(贪心)

CodeForces 449AJzzhu and Chocolate(贪心)

CodeForces 449A

题目大意: 
一块N*M的巧克力,指定K次切割,切割的要求看题目。问能否使得最小的那块巧克力的面积最大。如果不能进行K次切割输出-1.

解题思路: 
要使得切割后最小的巧克力的面积最大,那么尽量是朝一个方向切割是最优的。

代码:

#include <cstdio>

typedef long long ll;

ll N, M, K;
ll max (ll a, ll b) {
    return a > b ? a: b;
}

ll min(ll a, ll b) {
    return a < b ? a: b;
}

ll handle(ll x, ll y) {
    ll a = N/(x + 1);
    a = min(a, N - a*x);
    ll b = M/(y + 1);
    b = min(b, M - b*y);
    return a * b;
}

ll solve () {
    ll x = max(K - N + 1, 0);
    ll y = max(K - M + 1, 0);
    return max(handle(K - x, x), handle(y, K - y));
}

int main () {

    while (scanf ("%lld%lld%lld", &N, &M, &K) != EOF) {

        if (K > (N + M) - 2) {
            printf ("-1\n");
            continue;
        }

/* if (N > M) { ll t = N; N = M; M = t; } if (K + 1 <= M) { if (N % (K + 1) == 0) printf ("%lld\n", N /(K + 1) * M); else if (M % (K + 1) == 0) printf ("%lld\n", M /(K + 1) * N); else printf ("%lld\n", solve()); } else printf ("%lld\n", max(min(N/(K - M + 2), N - (N/(K - M + 2))*(K - M + 1)), min(M/(K - N + 2), M - (M/(K - N + 2) * (K - N + 1)))));*/
        printf ("%lld\n", solve());
    }
}

你可能感兴趣的:(CodeForces 449AJzzhu and Chocolate(贪心))