Submission #567633

#TimeUsernameProblemLanguageResultExecution timeMemory
567633perchutsXoractive (IZhO19_xoractive)C++17
100 / 100
3 ms340 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define sz(x) (int) x.size() #define endl '\n' #define pb push_back #define _ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #include "interactive.h" using namespace std; using ll = long long; using ull = unsigned long long; using ii = pair<int,int>; using iii = tuple<int,int,int>; const int inf = 2e9+1; const int mod = 1e9+7; const int maxn = 1e5+100; template<typename X, typename Y> bool ckmin(X& x, const Y& y) { return (y < x) ? (x=y,1):0; } template<typename X, typename Y> bool ckmax(X& x, const Y& y) { return (x < y) ? (x=y,1):0; } // namespace { // const int MAX_VALUE_OF_N = 100; // const int MAX_VALUE_OF_Q = 200; // int numberOfQueries = 0; // int n; // std::vector<int> a; // void wrong_answer(const char *MSG) { // printf("-1\n"); // exit(0); // } // } // void query() { // numberOfQueries++; // if (numberOfQueries > MAX_VALUE_OF_Q) { // wrong_answer("Number of queries exceeded"); // } // } // int ask(int position) { // query(); // if (position < 1 || position > n) { // wrong_answer("Not correct position"); // } // return a[position - 1]; // } // vector<int> get_pairwise_xor(vector<int> positions) { // query(); // if (positions.empty() || positions.size() > n) { // wrong_answer("Not correct size"); // } // sort(positions.begin(), positions.end()); // for (int i = 1; i < positions.size(); i++) { // if (positions[i] == positions[i - 1]) { // wrong_answer("Not unique"); // } // } // for (int i = 0; i < positions.size(); i++) { // if (positions[i] < 1 || positions[i] > n) { // wrong_answer("Not correct position"); // } // } // vector<int> pairwise_xor; // for (int i = 0; i < positions.size(); i++) { // for (int j = 0; j < positions.size(); j++) { // pairwise_xor.push_back(a[positions[i] - 1] ^ a[positions[j] - 1]); // } // } // sort(pairwise_xor.begin(), pairwise_xor.end()); // return pairwise_xor; // } vector<int> guess(int n) { vector<int>ans(n); map<int,int>where;//{number,position} ans[0] = ask(1); for(int i=0;i<7;++i){ if((1<<i)>n)break; vector<int>cur; for(int j=0;j<(1<<6);++j){ int act = ((j - (j&((1<<i)-1)))<<1) + (j&((1<<i)-1)) + (1<<i); if(act>n)break; if(act!=1)cur.pb(act); } vector<int>resp1 = get_pairwise_xor(cur); cur.pb(1); vector<int> resp2 = get_pairwise_xor(cur); int x = 0, y = 0; while(x<sz(resp2)){ while(x<sz(resp2)&&(y==sz(resp1)||resp2[x]!=resp1[y])){ if(resp2[x]!=0)where[resp2[x]^ans[0]]|=(1<<i); ++x; } ++y, ++x; } } for(auto [x,y]:where)ans[y-1] = x; return ans; } // int main() { // assert(scanf("%d", &n) == 1); // assert(1 <= n && n <= MAX_VALUE_OF_N); // for (int i = 1; i <= n; i++) { // int x; // assert(scanf("%d", &x) == 1); // assert(x >= 0 && x <= 1000 * 1000 * 1000); // a.push_back(x); // } // vector<int> participant_solution = guess(n); // if (participant_solution.size() != n) { // wrong_answer("-1"); // } // printf("%d\n", n); // for (auto i: participant_solution) { // printf("%d ", i); // } // printf("\n"); // printf("%d\n", numberOfQueries); // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...