結果
問題 | No.355 数当てゲーム(2) |
ユーザー | not_522 |
提出日時 | 2016-12-15 01:24:53 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 31 ms / 2,000 ms |
コード長 | 6,750 bytes |
コンパイル時間 | 2,000 ms |
コンパイル使用メモリ | 182,584 KB |
実行使用メモリ | 25,464 KB |
平均クエリ数 | 5.42 |
最終ジャッジ日時 | 2024-07-17 00:40:19 |
合計ジャッジ時間 | 6,500 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 27 ms
24,848 KB |
testcase_01 | AC | 27 ms
24,848 KB |
testcase_02 | AC | 24 ms
24,848 KB |
testcase_03 | AC | 24 ms
25,232 KB |
testcase_04 | AC | 25 ms
24,848 KB |
testcase_05 | AC | 23 ms
24,848 KB |
testcase_06 | AC | 25 ms
24,848 KB |
testcase_07 | AC | 24 ms
24,976 KB |
testcase_08 | AC | 25 ms
24,976 KB |
testcase_09 | AC | 24 ms
24,976 KB |
testcase_10 | AC | 25 ms
24,976 KB |
testcase_11 | AC | 24 ms
24,848 KB |
testcase_12 | AC | 25 ms
25,232 KB |
testcase_13 | AC | 24 ms
24,592 KB |
testcase_14 | AC | 25 ms
25,232 KB |
testcase_15 | AC | 25 ms
24,848 KB |
testcase_16 | AC | 26 ms
25,076 KB |
testcase_17 | AC | 24 ms
25,220 KB |
testcase_18 | AC | 25 ms
24,592 KB |
testcase_19 | AC | 27 ms
25,232 KB |
testcase_20 | AC | 26 ms
25,464 KB |
testcase_21 | AC | 25 ms
25,464 KB |
testcase_22 | AC | 26 ms
25,208 KB |
testcase_23 | AC | 27 ms
25,208 KB |
testcase_24 | AC | 24 ms
24,568 KB |
testcase_25 | AC | 25 ms
25,460 KB |
testcase_26 | AC | 26 ms
24,952 KB |
testcase_27 | AC | 25 ms
24,952 KB |
testcase_28 | AC | 27 ms
25,208 KB |
testcase_29 | AC | 25 ms
24,824 KB |
testcase_30 | AC | 25 ms
24,952 KB |
testcase_31 | AC | 26 ms
25,208 KB |
testcase_32 | AC | 26 ms
24,824 KB |
testcase_33 | AC | 26 ms
24,824 KB |
testcase_34 | AC | 26 ms
25,208 KB |
testcase_35 | AC | 25 ms
24,812 KB |
testcase_36 | AC | 27 ms
24,940 KB |
testcase_37 | AC | 27 ms
24,812 KB |
testcase_38 | AC | 26 ms
24,812 KB |
testcase_39 | AC | 28 ms
24,812 KB |
testcase_40 | AC | 31 ms
24,812 KB |
testcase_41 | AC | 29 ms
24,812 KB |
testcase_42 | AC | 29 ms
24,812 KB |
testcase_43 | AC | 29 ms
24,812 KB |
testcase_44 | AC | 27 ms
25,196 KB |
testcase_45 | AC | 30 ms
24,812 KB |
testcase_46 | AC | 30 ms
24,812 KB |
testcase_47 | AC | 30 ms
25,196 KB |
testcase_48 | AC | 30 ms
25,196 KB |
testcase_49 | AC | 29 ms
24,940 KB |
testcase_50 | AC | 28 ms
25,196 KB |
testcase_51 | AC | 28 ms
25,196 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; struct Initializer { Initializer() { cin.tie(0); ios::sync_with_stdio(0); cout << fixed << setprecision(15); } } initializer; template<typename T> inline istream& operator>>(istream &s, vector<T> &v) { for (T &t : v) s >> t; return s; } template<typename T> inline ostream& operator<<(ostream &s, const vector<T> &v) { for (const T &t : v) s << t << endl; return s; } template<typename T> inline T min(vector<T>& v) {return *min_element(v.begin(), v.end());} template<typename T> inline T max(vector<T>& v) {return *max_element(v.begin(), v.end());} template<typename T> inline int min_element(vector<T>& v) {return min_element(v.begin(), v.end()) - v.begin();} template<typename T> inline int max_element(vector<T>& v) {return max_element(v.begin(), v.end()) - v.begin();} template<typename T> inline void sort(vector<T>& v) {sort(v.begin(), v.end());} template<typename T, typename Function> inline void sort(vector<T>& v, Function func) {sort(v.begin(), v.end(), func);} template<typename T> inline void rsort(vector<T>& v) {sort(v.rbegin(), v.rend());} template<typename T> inline void reverse(vector<T>& v) {reverse(v.begin(), v.end());} template<typename T> inline void unique(vector<T>& v) {v.erase(unique(v.begin(), v.end()), v.end());} template<typename T> inline void nth_element(vector<T>& v, int n) {nth_element(v.begin(), v.begin() + n, v.end());} template<typename T> inline bool next_permutation(vector<T>& v) {return next_permutation(v.begin(), v.end());} template<typename T> inline int find(vector<T>& v, T t) {return find(v.begin(), v.end(), t) - v.begin();} template<typename T> inline int in(vector<T> v, T t) {return find(v, t) != (int)v.size();} template<typename T> inline int lower_bound(vector<T>& v, T t) {return lower_bound(v.begin(), v.end(), t) - v.begin();} template<typename T> inline int upper_bound(vector<T>& v, T t) {return upper_bound(v.begin(), v.end(), t) - v.begin();} template<typename T> inline T accumulate(const vector<T>& v, function<T(T, T)> func = plus<T>()) {return accumulate(v.begin(), v.end(), T(), func);} template<typename T> inline void adjacent_difference(vector<T>& v) {adjacent_difference(v.begin(), v.end(), v.begin());} template<typename T> inline void adjacent_difference(vector<T>& v, vector<T>& u) {adjacent_difference(v.begin(), v.end(), u.begin());} template<typename T> inline void partial_sum(vector<T>& v, vector<T>& u) {partial_sum(v.begin(), v.end(), u.begin());} template<typename T> inline T inner_product(vector<T>& v, vector<T>& u) {return inner_product(v.begin(), v.end(), u.begin(), T(0));} template<typename T> inline int count(const vector<T>& v, T t) {return count(v.begin(), v.end(), t);} template<typename T, typename Function> inline int count_if(const vector<T>& v, Function func) {return count_if(v.begin(), v.end(), func);} template<typename T, typename Function> inline void remove_if(vector<T>& v, Function func) {v.erase(remove_if(v.begin(), v.end(), func), v.end());} template<typename T, typename Function> inline bool any_of(vector<T> v, Function func) {return any_of(v.begin(), v.end(), func);} template<typename T> inline vector<T> subvector(vector<T>& v, int a, int b) {return vector<T>(v.begin() + a, v.begin() + b);} template<typename T> inline int kinds(const vector<T>& v) {return set<T>(v.begin(), v.end()).size();} template<typename T> inline void iota(vector<T>& v) {iota(v.begin(), v.end(), T());} 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 iterator<input_iterator_tag, int> { public: class Iterator : public iterator<input_iterator_tag, int> { 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 FixSizeSet { private: struct Iterator : public iterator<input_iterator_tag, int> { private: BitIterator val, n; public: Iterator(int val, int n) : val(val), n(n) {} Iterator operator*() { return *this; } bool operator!=(const Iterator& itr) const { return n != itr.n; } void operator++() { int x = val & -val, y = val + x; val = ((val & ~y) / x / 2) | y; if (val >= (1 << n)) n = 0; } 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: FixSizeSet(int n, int k) : i((1 << k) - 1, n), n(0, 0) {} Iterator& begin() { return i; } Iterator& end() { return n; } }; pair<int, int> query(const vector<int>& n) { cout << n[0] << " " << n[1] << " " << n[2] << " " << n[3] << endl; int x, y; cin >> x >> y; return make_pair(x, y); } int main() { map<vector<int>, pair<int, int>> mem; for (auto i : FixSizeSet(10, 4)) { vector<int> v; for (auto j : i) v.emplace_back(j); do { bool ok = true; for (const auto& q : mem) { int x = 0, y = 0; for (int k = 0; k < 4; ++k) { if (q.first[k] == v[k]) ++x; else if (in(v, q.first[k])) ++y; } if (x != q.second.first || y != q.second.second) ok = false; } if (!ok) continue; auto q = query(v); if (q.first == 4) return 0; mem[v] = q; } while (next_permutation(v)); } }