結果
問題 | No.281 門松と魔法(1) |
ユーザー |
![]() |
提出日時 | 2019-06-03 21:08:01 |
言語 | C (gcc 13.3.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,504 bytes |
コンパイル時間 | 212 ms |
コンパイル使用メモリ | 30,976 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-17 20:35:02 |
合計ジャッジ時間 | 2,100 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 55 RE * 2 |
ソースコード
// yukicoder: 281 門松と魔法(1)// 2019.6.3 bal4u#include <stdio.h>#define INF 0x55555555int check(int *h) {if (h[0] == h[1] || h[1] == h[2] || h[0] == h[2]) return 0;if (h[0] < h[2]) {return (h[1] < h[0] || h[1] > h[2]);} else {return (h[1] > h[0] || h[1] < h[2]);}}int d, ans;void rec(int *h, int id, int c) {int i, t;if (id == 3) {if (check(h) && c < ans) ans = c;return;}t = h[id];for (i = 0; i <= 2; i++) {if (h[id] < 0) h[id] = 0;rec(h, id+1, c+i);if (h[id] == 0) break;h[id] -= d;}h[id] = t;}void cutr(int h1, int h2, int h3) {int g[3];g[0] = h1, g[1] = h2;int t = (h3-h2-1)/d+1;h3 -= t*d;if (h3 < 0) h3 = 0;g[2] = h3;if (check(g)) {if (t < ans) ans = t;return;}h3 -= d;if (h3 < 0) h3 = 0;g[2] = h3, t++;if (check(g)) {if (t < ans) ans = t;}}void cutc(int h1, int h2, int h3) {int g[3];g[0] = h1, g[2] = h3;int t = (h2-h1-1)/d+1;h2 -= t*d;if (h2 < 0) h2 = 0;g[1] = h2;if (check(g)) {if (t < ans) ans = t;return;}h2 -= d;if (h2 < 0) h3 = 0;g[2] = h2, t++;if (check(g)) {if (t < ans) ans = t;}}int main(){int h[3];scanf("%d%d%d%d", &d, h, h+1, h+2);ans = INF;rec(h, 0, 0);if (ans == INF) {if (h[0] < h[1] && h[1] < h[2]) {cutr(h[0], h[1], h[2]);cutc(h[0], h[1], h[2]);}else if (h[0] > h[1] && h[1] > h[2]) {cutr(h[2], h[1], h[0]);cutc(h[2], h[1], h[0]);}}if (ans == INF) ans = -1;printf("%d\n", ans);return 0;}