Submission #370890

#TimeUsernameProblemLanguageResultExecution timeMemory
370890daniel920712Xoractive (IZhO19_xoractive)C++14
88 / 100
15 ms876 KiB
#include "interactive.h" #include <stdio.h> #include <vector> #include <set> #include <map> using namespace std; set < int > all; map < int , int > A; map < int , int > B; set < int > AA; set < int > BB; set < int > bit[15][15]; vector < int > how; vector < int > ans; vector < int > tt; vector < int > tt2; void F() { int i,j; ans[0]=ask(1); A.clear(); B.clear(); tt.clear(); for(auto i:how) { //printf("%d\n",i); tt.push_back(i+1); } tt2=get_pairwise_xor(tt); for(auto i:tt2) if(i) A[i]++; tt.clear(); for(auto i:how) if(i) tt.push_back(i+1); tt2=get_pairwise_xor(tt); for(auto i:tt2) if(i) A[i]--; all.insert(ans[0]); for(auto i:A) { for(j=0;j<i.second/2;j++) all.insert(i.first^ans[0]); } /*printf("aaa\n"); for(auto i:all) printf("%d ",i); printf("\n");*/ } void F2(int here) { int i,j; A.clear(); B.clear(); tt.clear(); for(auto i:how) { //printf("%d\n",i); tt.push_back(i+1); } tt2=get_pairwise_xor(tt); for(auto i:tt2) if(i) A[i]++; tt.clear(); for(auto i:how) if(i) tt.push_back(i+1); tt2=get_pairwise_xor(tt); for(auto i:tt2) if(i) A[i]--; bit[0][here].insert(ans[0]); for(auto i:A) { for(j=0;j<i.second/2;j++) bit[0][here].insert(i.first^ans[0]); } /*printf("aa\n"); for(auto i:bit[0][here]) printf("%d ",i); printf("\n");*/ //printf("\n"); } vector<int> guess(int N) { //BB int i,j,big=0; for(i=0;i<N;i++) ans.push_back(0); if(N<=2) { for(i=0;i<N;i++) ans[i]=ask(i+1); return ans; } else { for(i=0;i<N;i++) how.push_back(i); F(); for(i=0;i<10;i++) { how.clear(); //printf("bb %d\n",i); for(j=0;j<N;j++) { if((j&(1<<i))==0) { //printf("%d ",j); how.push_back(j); } } //printf("\n"); if(how.size()==N||how.size()==0) { big=i; break; } F2(i); for(auto j:all) if(bit[0][i].find(j)==bit[0][i].end()) bit[1][i].insert(j); } for(i=0;i<N;i++) { AA.clear(); for(auto j:all) AA.insert(j); for(j=0;j<big;j++) { if((i&(1<<j))==0) { BB.clear(); for(auto k:AA) if(bit[0][j].find(k)==bit[0][j].end()) BB.insert(k); for(auto k:BB) AA.erase(k); } else { BB.clear(); for(auto k:AA) if(bit[1][j].find(k)==bit[1][j].end()) BB.insert(k); for(auto k:BB) AA.erase(k); } } ans[i]=*AA.begin(); } } return ans; }

Compilation message (stderr)

Xoractive.cpp: In function 'void F()':
Xoractive.cpp:20:9: warning: unused variable 'i' [-Wunused-variable]
   20 |     int i,j;
      |         ^
Xoractive.cpp: In function 'void F2(int)':
Xoractive.cpp:53:9: warning: unused variable 'i' [-Wunused-variable]
   53 |     int i,j;
      |         ^
Xoractive.cpp: In function 'std::vector<int> guess(int)':
Xoractive.cpp:110:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  110 |             if(how.size()==N||how.size()==0)
      |                ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...