結果
問題 | No.281 門松と魔法(1) |
ユーザー | Tatamo |
提出日時 | 2016-06-14 18:42:26 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,451 bytes |
コンパイル時間 | 501 ms |
コンパイル使用メモリ | 58,040 KB |
実行使用メモリ | 814,464 KB |
最終ジャッジ日時 | 2024-11-06 19:54:35 |
合計ジャッジ時間 | 5,480 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | WA | - |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 2 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 1 ms
5,248 KB |
testcase_10 | AC | 1 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 2 ms
5,248 KB |
testcase_15 | AC | 136 ms
82,560 KB |
testcase_16 | AC | 1 ms
5,248 KB |
testcase_17 | MLE | - |
testcase_18 | AC | 1 ms
6,820 KB |
testcase_19 | MLE | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | AC | 2 ms
6,816 KB |
testcase_23 | AC | 17 ms
12,800 KB |
testcase_24 | AC | 2 ms
6,816 KB |
testcase_25 | WA | - |
testcase_26 | AC | 2 ms
6,816 KB |
testcase_27 | AC | 2 ms
6,820 KB |
testcase_28 | AC | 2 ms
6,820 KB |
testcase_29 | AC | 2 ms
6,820 KB |
testcase_30 | AC | 1 ms
6,816 KB |
testcase_31 | AC | 2 ms
6,816 KB |
testcase_32 | AC | 1 ms
6,820 KB |
testcase_33 | MLE | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
testcase_39 | -- | - |
testcase_40 | -- | - |
testcase_41 | -- | - |
testcase_42 | -- | - |
testcase_43 | -- | - |
testcase_44 | -- | - |
testcase_45 | -- | - |
testcase_46 | -- | - |
testcase_47 | -- | - |
testcase_48 | -- | - |
testcase_49 | -- | - |
testcase_50 | -- | - |
testcase_51 | -- | - |
testcase_52 | -- | - |
testcase_53 | -- | - |
testcase_54 | -- | - |
testcase_55 | -- | - |
testcase_56 | -- | - |
ソースコード
#include<iostream> #include<algorithm> #define ANS(n) {cout << n << endl; return 0;} using namespace std; typedef long long ll; int* cloneTree(int* tr){ int *clone = new int[3]; for(int i=0; i<3; i++){ clone[i] = tr[i]; } return clone; } bool check(int* tr){ if(tr[0] == tr[1] || tr[1] == tr[2] || tr[2] == tr[0]) return false; if(tr[0] < tr[1] && tr[1] > tr[2]) return true; if(tr[0] > tr[1] && tr[1] < tr[2]) return true; return false; } int main(){ int d; cin >> d; int *h = new int[3]; for(int i=0; i<3; i++){ cin >> h[i]; } // 最初から条件を満たしている if(check(h)) ANS(0) else if(d==0) ANS(-1) // むり bool flg_skip = false; // all same if(h[0] == h[1] && h[1] == h[2]){ if(h[0] == 0) ANS(-1) // むり else if(h[0] - d > 0) ANS(3) else ANS(-1) } // 左右どちらかが飛び出していて残り2つは同じ else if( (h[0] == h[1] && h[0] < h[2]) || (h[1] == h[2] && h[0] > h[1]) ){ if(h[1] == 0) ANS(-1) else ANS(1) } // 左右どちらかだけ低い else if( (h[0] == h[1] && h[0] > h[2]) || (h[1] == h[2] && h[0] < h[1]) ){ if(min(h[0], h[2]) == 0){ if(h[1]-d >0) ANS(1) else ANS(-1) } else { if(h[1]-d != min(h[0], h[2])) ANS(1) // 低くない方の左右端を削る else ANS(2) } } // 真ん中だけが飛び出している else if(h[0] == h[2]){ // 真ん中が大きい if(h[0] < h[1]){ if(h[0] == 0) ANS(-1) else ANS(1) } // 真ん中が小さい else{ // 真ん中が0 if(h[1] == 0){ if(h[0]-d <= 0) ANS(-1) else ANS(1) } else{ if(h[0]-d > h[1]) ANS(1) else { // 階段状 h[0] -= d; flg_skip = true; goto STAIR; } } } } // 階段状 // d=0なら無限ループ入ります else if((h[0] > h[1] && h[1] > h[2]) || (h[0] < h[1] && h[1] < h[2]) ){ STAIR: int tmp=0; int cnt=0; int c_h = h[1]; while(c_h>0){ // 真ん中削ってみる cnt++; c_h -= d; if(c_h < 0) c_h = 0; int* clone = cloneTree(h); clone[1] = c_h; if(check(clone)) { tmp=cnt; break; } } int higher = h[0]>h[2]?0:2; int h_h = h[higher]; cnt = 0; while(h_h>0) {// 高い方削ってみる cnt++; h_h -= d; if(h_h < 0) h_h = 0; int* clone = cloneTree(h); clone[higher] = h_h; if(check(clone)){ tmp=min(cnt,tmp); break; } } if(flg_skip) ANS(tmp+1) else ANS(tmp) } // 多分ここには来ない ANS(-1); }