Submission #172044

#TimeUsernameProblemLanguageResultExecution timeMemory
172044davitmargXoractive (IZhO19_xoractive)C++17
88 / 100
10 ms1044 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]; vector<int> get_pairwise_xor(vector<int> pos) { 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; return res; } int ask(int pos) { cout << "? " << pos << endl; cout << "| " << aa[pos] << endl; return aa[pos]; } #endif int x, n, pos[N], val[N]; map<int, vector<int>> bits; vector<int> get(vector<int> a) { a.PB(n + 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); // for (int i = 0; i < b.size(); i++) // cout << b[i] << " : "; // cout << endl; return b; } vector<int> guess(int N) { n = N; x = ask(n); pos[n] = x; n--; vector<int> a; for (int i = 0; i < n; i++) a.PB(i + 1); a = get(a); for (int i = 0; i < n; i++) val[i] = a[i]; for (int k = 0; (1 << k) < n; k++) { a.clear(); for (int i = 0; i < n; i++) if (((1 << k) & i) != 0) a.PB(i + 1); for (int i = 0; i < n; i++) bits[val[i]].PB(0); a = get(a); for (int i = 0; i < a.size(); i++) bits[a[i]].back() = 1; } for (int i = 0; i < n; i++) { int p = 0; vector<int> a = bits[val[i]]; //reverse(all(a)); for (int j = 0; j < a.size(); j++) p += (1 << j) * a[j]; pos[p + 1] = val[i]; } vector<int> ans; for (int i = 1; i <= n + 1; i++) ans.PB(pos[i]); return ans; } #ifdef death int main() { cin >> nn; for (int i = 1; i <= nn; i++) cin >> aa[i]; vector<int> res = guess(nn); cout << "! "; 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:77:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < b.size(); i++)
                     ~~^~~~~~~~~~
Xoractive.cpp:81: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:120:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < a.size(); i++)
                         ~~^~~~~~~~~~
Xoractive.cpp:128: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...