結果
問題 | No.2358 xy+yz+zx=N |
ユーザー |
👑 |
提出日時 | 2023-06-04 19:25:28 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 31 ms / 2,000 ms |
コード長 | 1,716 bytes |
コンパイル時間 | 329 ms |
コンパイル使用メモリ | 31,872 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-01 17:25:08 |
合計ジャッジ時間 | 1,304 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 |
ソースコード
#include <stdio.h>void merge_sort(int n, int x[][3]){static int y[1000001][3] = {};if (n <= 1) return;merge_sort(n / 2, &(x[0]));merge_sort((n + 1) / 2, &(x[n/2]));int i, p, q;for (i = 0, p = 0, q = n / 2; i < n; i++) {if (p >= n / 2) {y[i][0] = x[q][0];y[i][1] = x[q][1];y[i][2] = x[q++][2];} else if (q >= n) {y[i][0] = x[p][0];y[i][1] = x[p][1];y[i][2] = x[p++][2];} else if (x[p][0] < x[q][0] || (x[p][0] == x[q][0] && x[p][1] < x[q][1]) || (x[p][0] == x[q][0] && x[p][1] == x[q][1] && x[p][2] < x[q][2])){y[i][0] = x[p][0];y[i][1] = x[p][1];y[i][2] = x[p++][2];} else {y[i][0] = x[q][0];y[i][1] = x[q][1];y[i][2] = x[q++][2];}}for (i = 0; i < n; i++) {x[i][0] = y[i][0];x[i][1] = y[i][1];x[i][2] = y[i][2];}}int main(){int N;scanf("%d", &N);int T = 0, x, y, z;static int ans[1000001][3];for (x = 0; x * x * 3 <= N; x++) {for (y = x; x * y * 3 <= N && y * y <= N; y++) {if (x + y == 0 || (N - x * y) % (x + y) != 0) continue;z = (N - x * y) / (x + y);if (z < y) break;ans[T][0] = x;ans[T][1] = y;ans[T++][2] = z;if (x != y) {ans[T][0] = y;ans[T][1] = x;ans[T++][2] = z;}if (y != z) {ans[T][0] = x;ans[T][1] = z;ans[T++][2] = y;}if (z != x) {ans[T][0] = z;ans[T][1] = y;ans[T++][2] = x;}if (x != y && y != z) {ans[T][0] = y;ans[T][1] = z;ans[T++][2] = x;ans[T][0] = z;ans[T][1] = x;ans[T++][2] = y;}}}merge_sort(T, ans);int i;printf("%d\n", T);for (i = 0; i < T; i++) printf("%d %d %d\n", ans[i][0], ans[i][1], ans[i][2]);fflush(stdout);return 0;}