結果
問題 | No.2085 Directed Complete Graph |
ユーザー | 👑 hos.lyric |
提出日時 | 2022-09-26 22:35:30 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 142 ms / 2,000 ms |
コード長 | 2,848 bytes |
コンパイル時間 | 768 ms |
コンパイル使用メモリ | 102,124 KB |
実行使用メモリ | 25,220 KB |
平均クエリ数 | 2472.00 |
最終ジャッジ日時 | 2024-06-02 00:27:11 |
合計ジャッジ時間 | 3,600 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 22 ms
24,848 KB |
testcase_01 | AC | 20 ms
24,964 KB |
testcase_02 | AC | 133 ms
24,556 KB |
testcase_03 | AC | 128 ms
25,196 KB |
testcase_04 | AC | 142 ms
25,196 KB |
testcase_05 | AC | 72 ms
25,196 KB |
testcase_06 | AC | 75 ms
24,568 KB |
testcase_07 | AC | 131 ms
25,196 KB |
testcase_08 | AC | 99 ms
25,196 KB |
testcase_09 | AC | 123 ms
24,556 KB |
testcase_10 | AC | 142 ms
24,812 KB |
testcase_11 | AC | 141 ms
24,940 KB |
testcase_12 | AC | 139 ms
24,940 KB |
testcase_13 | AC | 138 ms
24,940 KB |
testcase_14 | AC | 140 ms
25,196 KB |
testcase_15 | AC | 20 ms
24,964 KB |
testcase_16 | AC | 20 ms
25,220 KB |
ソースコード
#include <cassert> #include <cmath> #include <cstdint> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <functional> #include <iostream> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <string> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> using namespace std; using Int = long long; template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; } template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; } template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; } // Sorts [first, last) so that for any adjacent elements a, b in this order, // comp(a, b) || !comp(b, a) // [buffer, buffer + floor((last - first) / 2)) must be available. template <class Iter, class Comp> void mergeSort(Iter first, Iter last, Iter buffer, Comp comp) { if (last - first >= 2) { Iter middle = first + (last - first) / 2; mergeSort(first, middle, buffer, comp); mergeSort(middle, last, buffer, comp); Iter i = first, j = first, k = buffer, l = buffer; for (; j != middle; ) *l++ = std::move(*j++); for (; k != l && j != last; ) *i++ = comp(*j, *k) ? *j++ : *k++; for (; k != l; ) *i++ = std::move(*k++); } } template <class T, class Comp> void mergeSort(T *first, T *last, Comp comp) { vector<T> buffer((last - first) / 2); mergeSort(first, last, buffer.data(), comp); } template <class T, class Comp> void mergeSort(vector<T> &as, Comp comp) { vector<T> buffer(as.size() / 2); mergeSort(as.begin(), as.end(), buffer.begin(), comp); } //////////////////////////////////////////////////////////////////////////////// int cache[510][510]; int Ask(int u, int v) { int &ret = cache[u][v]; if (!~ret) { if (u == v) { ret = 0; } else { printf("? %d %d\n", u + 1, v + 1); fflush(stdout); scanf("%d", &ret); cache[v][u] = ret ^ 1; } } return ret; } int main() { int N; scanf("%d", &N); vector<int> us(N); for (int u = 0; u < N; ++u) { us[u] = u; } memset(cache, ~0, sizeof(cache)); mergeSort(us, Ask); puts("!"); printf("%d\n", N - 1); for (int j = 0; j < N; ++j) { if (j) printf(" "); printf("%d", us[j] + 1); } puts(""); return 0; }