結果

問題 No.10 +か×か
ユーザー not_522not_522
提出日時 2015-08-18 21:08:08
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 2,689 bytes
コンパイル時間 1,191 ms
コンパイル使用メモリ 146,320 KB
実行使用メモリ 4,380 KB
最終ジャッジ日時 2023-09-25 12:55:35
合計ジャッジ時間 2,215 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

template<typename T> int least_bit(T n) {
  static_assert(sizeof(T) == 4 || sizeof(T) == 8, "unsupported size");
  if (sizeof(T) == 4) return __builtin_ffs(n) - 1;
  if (sizeof(T) == 8) return __builtin_ffsll(n) - 1;
}

template<typename T> int most_bit(T n) {
  static_assert(sizeof(T) == 4 || sizeof(T) == 8, "unsupported size");
  if (sizeof(T) == 4) return n ? 31 - __builtin_clz(n) : -1;
  if (sizeof(T) == 8) return n ? 63 - __builtin_clzll(n) : -1;
}

template<typename T> int count_bit(T n) {
  static_assert(sizeof(T) == 4 || sizeof(T) == 8, "unsupported size");
  if (sizeof(T) == 4) return __builtin_popcount(n);
  if (sizeof(T) == 8) return __builtin_popcountll(n);
}

class BitIterator {
public:

  class Iterator {
  private:
    int val, bit;

  public:
    Iterator(int val, int bit) : val(val), bit(bit) {}

    Iterator operator*() {
      return *this;
    }

    bool operator!=(const Iterator& itr) const {
      return val != itr.val;
    }

    void operator++() {
      val = least_bit(bit & (-1 << (val + 1)));
    }

    operator int() {
      return val;
    }
  };
  
  Iterator i, n;
  int bit;

  BitIterator(int n) : i(least_bit(n), n), n(-1, n), bit(n) {}

  bool operator!=(const BitIterator& itr) const {
    return i != itr.i;
  }

  void operator++() {
    *this = BitIterator(bit + 1);
  }

  operator int() const {
    return bit;
  }

  bool in(int i) const {
    return bit & (1 << i);
  }

  Iterator& begin() {
    return i;
  }

  Iterator& end() {
    return n;
  }
};

class PowerSet {
private:
  class Iterator {
  private:
    BitIterator val;

  public:
    Iterator(int val) : val(val) {}

    Iterator operator*() {
      return *this;
    }

    bool operator!=(Iterator& itr) {
      return val != itr.val;
    }

    void operator++() {
      ++val;
    }

    operator int() const {
      return val;
    }

    bool in(int i) const {
      return val.in(i);
    }

    BitIterator::Iterator& begin() {
      return val.begin();
    }

    BitIterator::Iterator& end() {
      return val.end();
    }
  };

  Iterator i, n;

public:
  PowerSet(int n) : i(0), n(1 << n) {}

  Iterator& begin() {
    return i;
  }

  Iterator& end() {
    return n;
  }
};

int main() {
  int n, total;
  cin >> n >> total;
  vector<int> a(n);
  for (int& i : a) cin >> i;
  for (const auto& s : PowerSet(n - 1)) {
    int r = a[0];
    for (int i = 0; i < n - 1; ++i) {
      if (!s.in(i)) r += a[i + 1];
      else r *= a[i + 1];
      if (r > total) break;
    }
    if (r == total) {
      for (int i = 0; i < n - 1; ++i) cout << (s.in(i) ? "*" : "+");
      cout << endl;
      return 0;
    }
  }
}
0