Submission #527937

#TimeUsernameProblemLanguageResultExecution timeMemory
527937perchutsLibrary (JOI18_library)C++17
100 / 100
300 ms284 KiB
#include <bits/stdc++.h> #include "library.h" using namespace std; // int Query(const vector<int>& v); // void Answer(const vector<int>& res); bool pos[1011]; void Solve(int N) { vector<int> M(N); for(int i = 0; i < N; i++) { M[i] = 1; } // 4LogN => acho o primeiro e o ultimo. agora, achar os do meio... //só fazer uma busca simples //nao ;-; int A = Query(M); vector<int> res(N); int last=-1,cur,l,r; for(int k=1;k<=N;++k){ l = 1, r = N-k+1, cur = r; while(l<=r){ int md = l + (r-l+1)/2,cnt=0; // printf("%d %d\n",l,md); for(int i=1;i<=N;i++){ if(pos[i]){ M[i-1] = 1;continue; } cnt++; M[i-1] = (l<=cnt&&cnt<=md); } int q1 = Query(M); if(last==-1)for(int i=0;i<N;i++)M[i]^=1; else for(int i=0;i<N;i++)if(pos[i+1])M[i]=0; int sum = 0;for(int i=0;i<N;i++)sum+=M[i]; int q2 = (sum?Query(M):0); if((last==-1&&q1<q2)||(last!=-1&&q1!=q2))l = md + 1; else cur = md, r = md - 1; } int cnt = 0; for(int i=0;i<N;i++){ cnt+=!pos[i+1]; if(cnt==cur){ cur = i; break; } } // printf("%d\n",cur); pos[cur+1] = 1,res[k-1] = cur+1,last = cur; } Answer(res); } // namespace { // struct Judge // { // int N; // int A[1002]; // int pos[1002]; // bool f[1002]; // int query_c; // bool answered; // void init() // { // query_c=0; // int ret=scanf("%d",&N); ret++; // answered=false; // for(int i=0;i<N;i++)ret=scanf("%d",&A[i]),pos[A[i]]=i; // } // int query(const vector<int>& M) // { // if(query_c==20000) // { // puts("Wrong Answer [3]"); // exit(0); // } // if(int(M.size())!=N) // { // puts("Wrong Answer [1]"); // exit(0); // } // bool all_zero=true; // for(int i=0;i<N;i++) // { // if(M[i]!=0&&M[i]!=1) // { // puts("Wrong Answer [2]"); // exit(0); // } // if(M[i]==1)all_zero=false; // } // if(all_zero) // { // puts("Wrong Answer [2]"); // exit(0); // } // memset(f,0,sizeof(f)); // for(int i=0;i<N;i++)if(M[i])f[pos[i+1]]=true; // bool las=false; // int r=0; // for(int i=0;i<N;i++) // { // if(las==false&&f[i]==true)r++; // las=f[i]; // } // query_c++; // return r; // } // void answer(const vector<int>& res) // { // bool f1=true,f2=true; // if(int(res.size())!=N) // { // puts("Wrong Answer [4]"); // exit(0); // } // if(answered) // { // puts("Wrong Answer [7]"); // exit(0); // } // answered=true; // memset(f,0,sizeof(f)); // for(int i=0;i<N;i++) // { // if(res[i]<=0||res[i]>N) // { // puts("Wrong Answer [5]"); // exit(0); // } // if(f[res[i]]) // { // puts("Wrong Answer [6]"); // exit(0); // } // f[res[i]]=true; // } // for(int i=0;i<N;i++) // { // f1&=A[i]==res[i]; // f2&=A[i]==res[N-i-1]; // } // if(!f1&&!f2) // { // puts("Wrong Answer [8]"); // exit(0); // } // } // void end() // { // if(!answered)puts("Wrong Answer [7]"); // else printf("Accepted : %d\n",query_c); // } // }judge; // } // int Query(const vector<int>& M) // { // return judge.query(M); // } // void Answer(const vector<int>& res) // { // judge.answer(res); // } // int main() // { // judge.init(); // Solve(judge.N); // judge.end(); // }

Compilation message (stderr)

library.cpp: In function 'void Solve(int)':
library.cpp:20:6: warning: unused variable 'A' [-Wunused-variable]
   20 |  int A = Query(M);
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...