比赛 2025.10.18 评测结果 AAAAAAAAAA
题目名称 生日蛋糕 最终得分 100
用户昵称 xuyuqing 运行时间 1.135 s
代码语言 C++ 内存使用 3.69 MiB
提交时间 2025-10-18 09:54:08
显示代码纯文本

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iostream>

using namespace std;

long long n;
long long m;
long long res = 1e9;

void dfs (long long now, long long v, long long s, long long lastr, long long lasth) {
	if (s > res) {
		return;
	}
	if (now == m) {
		if (v == 0) {
			res = min (res, s);
		}
		return;
	}
	if (v == 0) {
		return;
	}

	long long minv = 0;
	for (int i = 1; i <= m - now; i++) {
		minv += i * i * i;
	}
	if (minv > v) {
		return;
	}

	long long maxv = 0;
	for (long long i = 1; i <= m - now; i++) {
		maxv += (lastr - i) * (lastr - i) * (lasth - i);
	}
	if (maxv < v) {
		return;
	}

	for (long long r = m - now; r < lastr; r++) {
		for (long long h = m - now; h < lasth; h++) {
			if (r * r * h > v) {
				if (h == 1) {
					return;
				}
				break;
			}
			dfs (now + 1, v - r * r * h, s + 2 * r * h, r, h);
		}
	}
}

int main () {
	
	freopen ("cake.in", "r", stdin);
	freopen ("cake.out", "w", stdout);

	cin >> n >> m;
	
	for (long long r = m; r * r <= n; r++) {
		for (long long h = m; h * r * r <= n; h++) {
			dfs (1, n - h * r * r, r * r + 2 * r * h, r, h);
		}
	}

	if (res == 1e9) {
		res = 0;
	}
	cout << res << endl;
	
	return 0;
}