天坑。。。

杭电

dls代码:https://ideone.com/Wo55gi

官方题解:http://bestcoder.hdu.edu.cn/blog/

2018 Multi-University Training Contest 1

1001 Maximum Multiple

打表找规律,发现只有当n是3倍数或者4倍数时才有解

而且当n%3 == 0,max(x*y*z) = (n/3) * (n/3) * (n/3)  = n^3 / 27,

当n%4 == 0, max(x*y*z) = (n/2) * (n/4) * (n/4) = n^3 / 32。

正解是解不定方程组

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head

int main() {
    int T, n;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        if(n % 3 == 0) printf("%lld\n", 1LL * n * n * n / 27);
        else if(n % 4 == 0)printf("%lld\n", 1LL * n * n * n / 32);
        else printf("-1\n");
    }
    return 0;
}
View Code

相关文章: