Submission #384367

#TimeUsernameProblemLanguageResultExecution timeMemory
384367vanicXoractive (IZhO19_xoractive)C++14
Compilation error
0 ms0 KiB
#include "interactive.h" #include <cmath> #include <iostream> #include <algorithm> #include <set> #include <cassert> #include <cstdio> #include <cstdlib> #include <cassert> #include <vector> #include <algorithm> using namespace std; 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); 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; } const int Log=7; vector < int > sol; vector < int > q; vector < int > odg1, odg2; vector < int > komp; vector < int > val[Log]; vector < int > tren; void probaj(int x){ int pos; for(int i=0; i<Log; i++){ if((1<<i)&x){ if(tren.empty()){ tren=val[i]; } else{ pos=0; for(int j=0; j<(int)tren.size(); j++){ while(pos<(int)val[i].size() && val[i][pos]<tren[j]){ pos++; } // cout << val[i][pos] << endl; if(pos>=(int)val[i].size() || tren[j]!=val[i][pos]){ // cout << "brisem " << j << endl; tren.erase(tren.begin()+j); j--; } else{ pos++; } } } } /* for(int i=0; i<tren.size(); i++){ cout << tren[i] << ' '; } cout << endl;*/ } while(tren.size()>1 && tren.back()==tren[0]){ tren.pop_back(); } assert(!tren.empty()); if(tren.size()>1){ tren={ask(x+1)}; } // assert(tren.size()==1); for(int i=0; i<Log; i++){ if((1<<i)&x){ val[i].erase(find(val[i].begin(), val[i].end(), tren[0])); } } sol[x]=tren[0]; tren.clear(); } vector < int > guess(int n){ sol.resize(n, 0); sol[0]=ask(1); int sz; for(int j=0; j<Log; j++){ for(int i=1; i<n; i++){ if(i&(1<<j)){ q.push_back(i+1); } } if(q.empty()){ break; } odg2=get_pairwise_xor(q); q.push_back(1); odg1=get_pairwise_xor(q); q.clear(); int pos1=0, pos2=0; for(int i=0; i<(int)odg1.size(); i++){ if(pos2<(int)odg2.size() && odg1[pos1]==odg2[pos2]){ pos1++; pos2++; } else{ komp.push_back(odg1[pos1]); pos1++; } } /* for(int i=0; i<komp.size(); i++){ cout << komp[i] << ' '; } cout << endl;*/ komp.erase(komp.begin()); sz=komp.size(); for(int i=0; i<sz/2; i++){ komp.erase(komp.begin()+i); } for(int i=0; i<(int)komp.size(); i++){ val[j].push_back(sol[0]^komp[i]); // cout << val[j].back() << ' '; } // cout << endl;*/ komp.clear(); } // cout << endl; for(int i=n-1; i>0; i--){ probaj(i); } /* for(int i=0; i<n; i++){ cout << sol[i] << ' '; } cout << endl;*/ return sol; }

Compilation message (stderr)

Xoractive.cpp: In function 'std::vector<int> get_pairwise_xor(std::vector<int>)':
Xoractive.cpp:48:47: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   48 |     if (positions.empty() || positions.size() > n) {
      |                              ~~~~~~~~~~~~~~~~~^~~
Xoractive.cpp:54:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int i = 1; i < positions.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~
Xoractive.cpp:60:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     for (int i = 0; i < positions.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~
Xoractive.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for (int i = 0; i < positions.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~
Xoractive.cpp:69:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |         for (int j = 0; j < positions.size(); j++) {
      |                         ~~^~~~~~~~~~~~~~~~~~
Xoractive.cpp: In function 'int main()':
Xoractive.cpp:96:37: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   96 |     if (participant_solution.size() != n) {
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/tmp/cc8eImk9.o: In function `query()':
grader.cpp:(.text+0x30): multiple definition of `query()'
/tmp/cc9P0O0P.o:Xoractive.cpp:(.text+0x60): first defined here
/tmp/cc8eImk9.o: In function `ask(int)':
grader.cpp:(.text+0x60): multiple definition of `ask(int)'
/tmp/cc9P0O0P.o:Xoractive.cpp:(.text+0x80): first defined here
/tmp/cc8eImk9.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/cc9P0O0P.o:Xoractive.cpp:(.text.startup+0x0): first defined here
/tmp/cc8eImk9.o: In function `get_pairwise_xor(std::vector<int, std::allocator<int> >)':
grader.cpp:(.text+0xc0): multiple definition of `get_pairwise_xor(std::vector<int, std::allocator<int> >)'
/tmp/cc9P0O0P.o:Xoractive.cpp:(.text+0x450): first defined here
collect2: error: ld returned 1 exit status