結果

問題 No.334 門松ゲーム
ユーザー asi1024asi1024
提出日時 2016-02-21 21:37:54
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 19 ms / 2,000 ms
コード長 895 bytes
コンパイル時間 3,600 ms
コンパイル使用メモリ 166,364 KB
実行使用メモリ 4,372 KB
最終ジャッジ日時 2023-10-23 18:49:15
合計ジャッジ時間 5,029 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,372 KB
testcase_01 AC 2 ms
4,372 KB
testcase_02 AC 4 ms
4,372 KB
testcase_03 AC 2 ms
4,372 KB
testcase_04 AC 1 ms
4,372 KB
testcase_05 AC 1 ms
4,372 KB
testcase_06 AC 2 ms
4,372 KB
testcase_07 AC 2 ms
4,372 KB
testcase_08 AC 1 ms
4,372 KB
testcase_09 AC 4 ms
4,372 KB
testcase_10 AC 7 ms
4,372 KB
testcase_11 AC 7 ms
4,372 KB
testcase_12 AC 1 ms
4,372 KB
testcase_13 AC 3 ms
4,372 KB
testcase_14 AC 19 ms
4,372 KB
testcase_15 AC 2 ms
4,372 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define ALL(x) (x).begin(),(x).end()

using namespace std;

int N, a[16];

tuple<bool,int,int,int> dp(int bit) {
  for (int i = 0; i < N; ++i)
    if ((bit >> i) & 1)
      for (int j = i+1; j < N; ++j)
        if ((bit >> j) & 1)
          for (int k = j+1; k < N; ++k)
            if ((bit >> k) & 1) {
              int nbit = bit & ~(1 << i) & ~(1 << j) & ~(1 << k);
              if (!get<0>(dp(nbit)) &&
                  ((a[i] > a[j] && a[j] < a[k]) ||
                   (a[i] < a[j] && a[j] > a[k])))
                return make_tuple(true, i, j, k);
            }
  return make_tuple(false, 0, 0, 0);
}

int main() {
  cin >> N;
  REP(i,N) cin >> a[i];
  bool res; int i, j, k;
  tie(res, i, j, k) = dp((1 << N) - 1);
  if (res) cout << i << " " << j << " " << k << endl;
  else cout << -1 << endl;
  return 0;
}
0