From bcc4c73f9fe100ae7d44770b6e12f45153ab2639 Mon Sep 17 00:00:00 2001 From: hanyixuanten Date: Mon, 26 Oct 2026 10:19:50 +0000 Subject: [PATCH] new file: P17736.cpp --- P17736.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++ P17736.md | 46 +++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 P17736.cpp create mode 100644 P17736.md diff --git a/P17736.cpp b/P17736.cpp new file mode 100644 index 0000000..0c3cc94 --- /dev/null +++ b/P17736.cpp @@ -0,0 +1,119 @@ +#include +using namespace std; +const int dat[][3] = { + {1, -1, 0}, {0, 0, 1}, {0, 1, 1}, {1, 1, 1}, + {0, 0, 0}, {0, 0, 0}, {-1, -1, 2}, {-1, 0, 2}, + {0, 0, 2}, {0, 1, 2}, {1, 1, 2}, {-2, -2, 3}, + {-11, 7, 10}, {0, 0, 0}, {0, 0, 0}, {-1, 2, 2}, + {0, 2, 2}, {1, 2, 2}, {-2, -1, 3}, {-2, 0, 3}, + {-2, 1, 3}, {-14, -11, 16}, {0, 0, 0}, {0, 0, 0}, + {2, 2, 2}, {-1, -1, 3}, {-1, 0, 3}, {0, 0, 3}, + {0, 1, 3}, {1, 1, 3}, {0, 0, 0}, {0, 0, 0}, + {0, 0, 0}, {0, 0, 0}, {-1, 2, 3}, {0, 2, 3}, + {1, 2, 3}, {-3, 0, 4}, {-3, 1, 4}, {0, 0, 0}, + {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {2, 2, 3}, + {-7, -5, 8}, {-3, 2, 4}, {-2, 3, 3}, {-8, 6, 7}, + {-2, -2, 4}, {0, 0, 0}, {0, 0, 0}, {-796, 602, 659}, + {0, 0, 0}, {-1, 3, 3}, {0, 3, 3}, {1, 3, 3}, + {-2, 0, 4}, {-2, 1, 4}, {0, 0, 0}, {0, 0, 0}, + {-4, -1, 5}, {-4, 0, 5}, {2, 3, 3}, {-1, 0, 4}, + {0, 0, 4}, {0, 1, 4}, {1, 1, 4}, {0, 0, 0}, + {0, 0, 0}, {-4, 2, 5}, {-21, 11, 20}, {-1, 2, 4}, + {0, 2, 4}, {1, 2, 4}, {0, 0, 0}, {0, 0, 0}, + {0, 0, 0}, {0, 0, 0}, {-55, 26, 53}, {-33, -19, 35}, + {2, 2, 4}, {3, 3, 3}, {-11, -11, 14}, {-2, 3, 4}, + {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {-4126, -1972, 4271}, + {-4, 3, 5}, {-7, 6, 6}, {-1, 3, 4}, {0, 3, 4}, + {1, 3, 4}, {-5, -5, 7}, {0, 0, 0}, {0, 0, 0}, + {-22, 14, 20}, {-3, -1, 5}, {-3, 0, 5}, {2, 3, 4}, + {-6, -3, 7}, {-3, 4, 4}, {-239, 118, 229}, {0, 0, 0}, + {0, 0, 0}, {-7, -4, 8}, {-3, 2, 5}, {-48, -28, 51}, + {-1165, -948, 1345}, {-2, -2, 5}, {0, 0, 0}, {-881, -296, 892}, + {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {-10, -6, 11}, + {-2, -1, 5}, {-2, 0, 5}, {3, 3, 4}, {-6, -2, 7}, + {-2, 4, 4}, {0, 0, 0}, {0, 0, 0}, {-1, -1, 5}, + {-1, 0, 5}, {0, 0, 5}, {0, 1, 5}, {1, 1, 5}, + {0, 4, 4}, {1, 4, 4}, {0, 0, 0}, {0, 0, 0}, + {-1, 2, 5}, {0, 2, 5}, {1, 2, 5}, {-6, 2, 7}, + {2, 4, 4}, {-11, -9, 13}, {-86, -77, 103}, {0, 0, 0}, + {0, 0, 0}, {2, 2, 5}, {-7, -3, 8}, {0, 0, 0}, + {-2, 3, 5}, {-8, -7, 10}, {-9, -5, 10}, {-56, -50, 67}, + {0, 0, 0}, {0, 0, 0}, {-367, 260, 317}, {-1, 3, 5}, + {0, 3, 5}, {1, 3, 5}, {-5, -4, 7}, {3, 4, 4}, + {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {-130, 80, 119}, + {2, 3, 5}, {-7, -2, 8}, {-3, 4, 5}, {-26, -21, 30}, + {-47, -45, 58}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, + {-7, -1, 8}, {-7, 0, 8}, {-7, 1, 8}, {-6, -5, 8}, + {0, 0, 0}, {0, 0, 0}, {-8, 7, 7}, {0, 0, 0}, + {0, 0, 0}, {-7, 2, 8}, {-13, -10, 15}, {3, 3, 5}, + {0, 0, 0}, {-2, 4, 5}, {-14, 9, 13}, {-17, 10, 16}, + {0, 0, 0}, {0, 0, 0}, {-4, 5, 5}, {-58, 27, 56}, + {-1, 4, 5}, {0, 4, 5}, {1, 4, 5}, {-5, -3, 7}, + {4, 4, 4}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, + {-7, 3, 8}, {2, 4, 5}, {-48, -19, 49}, {-24, 15, 22}, + {-2, -2, 6}, +}; +int main() { + int t; + scanf("%d", &t); + while (t--) { + int x; + scanf("%d", &x); + int a = dat[x][0], b = dat[x][1], c = dat[x][2]; + if (a == 0 && b == 0 && c == 0) { + printf("impossible\n"); + } else { + printf("%d %d %d\n", a, b, c); + } + } + return 0; +} +/* +#include +using namespace std; +struct ans { + int a, b, c; + bool flag; +} ans[205]; +int remain = 201; +long long cube[10005]; +int main() { + for (int i = -5000; i <= 5000; i++) + cube[i + 5000] = 1ll * i * i * i; + // a <= b <= c + for (int a = -5000; a <= 4 && remain; a++) { + int bmax = min(5000, (int)cbrt((200 - cube[a + 5000]) / 2.0) + 1); + for (int b = a; b <= bmax && remain; b++) { + // - a^3 - b^3 <= c <= 200 - a^3 - b^3 + int cmax = cbrt(200 - cube[a + 5000] - cube[b + 5000]) + 1, + cmin = cbrt(-cube[a + 5000] - cube[b + 5000]) - 1; + int L = max(max(cmin, -5000), b); + int R = min(cmax, 5000); + if (L > R) { + if (b > min(cmax, 5000) || cmax < -5000) + break; + continue; + } + for (int c = max(max(cmin, -5000), b); c <= min(cmax, 5000); c++) { + int now = cube[a + 5000] + cube[b + 5000] + cube[c + 5000]; + if (0 <= now && now <= 200) { + if (!ans[now].flag) + ans[now] = {a, b, c, 1}, remain--; + } + } + } + } + int t; + scanf("%d", &t); + while (t--) { + int x; + scanf("%d", &x); + if (ans[x].flag) { + printf("%d %d %d\n", ans[x].a, ans[x].b, ans[x].c); + } else { + printf("impossible\n"); + } + } + return 0; +} +*/ \ No newline at end of file diff --git a/P17736.md b/P17736.md new file mode 100644 index 0000000..dc87dab --- /dev/null +++ b/P17736.md @@ -0,0 +1,46 @@ +# P17736 [ICPC 2019 Xuzhou R] The Answer to the Ultimate Question of Life, The Universe, and Everything. + +## 题目描述 + +数十年来,科学家们一直想知道从 0 到 100 的每个数字是否都可以表示为三个立方数之和,其中立方数是指同一个数自乘三次。 + +42 是最后一个没有已知解的数字——直到现在。 + +其解为 $(-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3 = 42$。 + +现在,Yen-Jen 怀疑是否还有其他解存在。但是,这些解并不容易找到。Yen-Jen 想要先找出一些**简单解**。也就是说,对于方程 $a^3 + b^3 + c^3 = x$,Yen-Jen 希望为 $[0, 200]$ 内的每个整数 $x$ 找出至少一组解,其中 $|a|, |b|, |c| \le 5000$。 + +由于 Yen-Jen 仍在忙着准备某个(也许是这道题的?)测试数据,请你帮他为每个 $x$ 找出至少一组解,或者告诉他当 $|a|, |b|, |c| \le 5000$ 时解不存在。 + +## 输入格式 + +第一行包含一个整数 $T$,表示需要检查的 $x$ 的个数。 +接下来的 $T$ 行,每行包含一个整数 $x$。 + +- $1 \le T \le 10$ +- $0 \le x \le 200$ + +## 输出格式 + +对于每组测试数据,输出一行三个由空格分隔的整数 $a, b, c$,满足 $a^3 + b^3 + c^3 = x$ 且 $|a|, |b|, |c| \le 5000$。如果解不存在,输出 `impossible`。 + +## 输入输出样例 #1 + +### 输入 #1 + +``` +2 +1 +2 +``` + +### 输出 #1 + +``` +1 1 -1 +1 1 0 +``` + +## 说明/提示 + +翻译由 DeepSeek V4 Pro 完成 \ No newline at end of file