Submission #172047

#TimeUsernameProblemLanguageResultExecution timeMemory
172047davitmargXoractive (IZhO19_xoractive)C++17
100 / 100
7 ms632 KiB
/*DavitMarg*/ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <unordered_map> #include <set> #include <queue> #include <iomanip> #include <bitset> #include <stack> #include <cassert> #include <iterator> #include <fstream> #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(), v.end() using namespace std; const int N = 105; #ifndef death #include "interactive.h"; #endif #ifdef death int nn, aa[102], Q; vector<int> get_pairwise_xor(vector<int> pos) { Q++; vector<int> res; cout << "? "; for (int i = 0; i < pos.size(); i++) cout << pos[i] << " "; cout << endl; for (int i = 0; i < pos.size(); i++) for (int j = 0; j < pos.size(); j++) res.PB(aa[pos[i]] ^ aa[pos[j]]); sort(all(res)); cout << "| "; for (int i = 0; i < res.size(); i++) cout << res[i] << " "; cout << endl; cout << endl; return res; } int ask(int pos) { Q++; cout << "? " << pos << endl; cout << "| " << aa[pos] << endl; cout << endl; return aa[pos]; } #endif int x, n, pos[N], val[N]; map<int, vector<int>> bits; vector<int> get(vector<int> a) { sort(all(a)); reverse(all(a)); bool wasin = 0; if (a.back() != 1) a.PB(1); else wasin = 1; vector<int> b = get_pairwise_xor(a); a.pop_back(); multiset<int> s; for (int i = 0; i < b.size(); i++) s.insert(b[i]); b = get_pairwise_xor(a); s.erase(s.find(0)); for (int i = 0; i < b.size(); i++) s.erase(s.find(b[i])); set<int> S; for (auto it = s.begin(); it != s.end(); ++it) S.insert((*it)); b.clear(); for (auto it = S.begin(); it != S.end(); ++it) b.PB((*it) ^ x); if (wasin) b.PB(1); // for (int i = 0; i < b.size(); i++) // cout << b[i] << " : "; // cout << endl; return b; } vector<int> guess(int N) { n = N; x = ask(1); bits[x] = vector<int>(0); int p = 0; for (int k = 0; (1 << k) < n; k++) { p++; vector<int> a; for (int i = 0; i < n; i++) if (((1 << k) & i) != 0) a.PB(i + 1); a = get(a); for (int i = 0; i < a.size(); i++) { while (bits[a[i]].size() < k + 1) bits[a[i]].PB(0); bits[a[i]].back() = 1; } } //cout << p << "!!!!!!!!!!!!!!!" << Q << endl; for (auto it = bits.begin(); it != bits.end(); ++it) { int val = it->first; int p = 0; vector<int> a = bits[val]; //reverse(all(a)); for (int j = 0; j < a.size(); j++) p += (1 << j) * a[j]; pos[p + 1] = val; } vector<int> ans; for (int i = 1; i <= n; i++) ans.PB(pos[i]); return ans; } #ifdef death int main() { cin >> nn; for (int i = 1; i <= nn; i++) aa[i] = i; vector<int> res = guess(nn); cout << "! " << Q << endl; for (int i = 0; i < res.size(); i++) cout << res[i] << " "; cout << endl; return 0; } #endif /* */

Compilation message (stderr)

Xoractive.cpp:29:25: warning: extra tokens at end of #include directive
 #include "interactive.h";
                         ^
Xoractive.cpp: In function 'std::vector<int> get(std::vector<int>)':
Xoractive.cpp:88:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < b.size(); i++)
                     ~~^~~~~~~~~~
Xoractive.cpp:92:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < b.size(); i++)
                     ~~^~~~~~~~~~
Xoractive.cpp: In function 'std::vector<int> guess(int)':
Xoractive.cpp:124:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < a.size(); i++)
                         ~~^~~~~~~~~~
Xoractive.cpp:126:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             while (bits[a[i]].size() < k + 1)
                    ~~~~~~~~~~~~~~~~~~^~~~~~~
Xoractive.cpp:138:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < a.size(); j++)
                         ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...