結果
問題 | No.2358 xy+yz+zx=N |
ユーザー | 👑 ygussany |
提出日時 | 2023-06-04 19:25:28 |
言語 | C (gcc 12.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,376 KB |
testcase_02 | AC | 1 ms
5,376 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | AC | 1 ms
5,376 KB |
testcase_05 | AC | 1 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 30 ms
5,376 KB |
testcase_09 | AC | 31 ms
5,376 KB |
testcase_10 | AC | 24 ms
5,376 KB |
testcase_11 | AC | 25 ms
5,376 KB |
testcase_12 | AC | 17 ms
5,376 KB |
ソースコード
#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; }