Submission #1217034

#TimeUsernameProblemLanguageResultExecution timeMemory
1217034noyancanturkSuper Dango Maker (JOI22_dango3)C++20
100 / 100
178 ms644 KiB
#include "dango3.h" #include<bits/stdc++.h> using namespace std; #define pb push_back void Solve(int n,int m){ srand(time(0)); int p[n*m]; for(int i=0;i<n*m;i++){ p[i]=i+1; } int ok[n*m+1]{}; int left=n*m; random_shuffle(p,p+n*m); while(left){ if(left==n){ vector<int>ans; for(int i=0;i<n*m;i++){ if(!ok[p[i]])ans.pb(p[i]); } Answer(ans); break; } int l=2*n,r=left,res=left; while(l<=r){ int mid=l+r>>1; vector<int>toask; for(int i=0;i<n*m;i++){ if(!ok[p[i]]){ toask.pb(p[i]); } if(toask.size()==mid)break; } int k=Query(toask); if(1<=k){ res=mid; r=mid-1; }else{ l=mid+1; } } vector<int>vv; for(int i=0;i<n*m;i++){ if(!ok[p[i]])vv.pb(p[i]); if(vv.size()==res)break; } auto f=[&](int x,int y,int z){ vector<int>toask; for(int j=0;j<vv.size();j++){ if(x==j||y==j||z==j)continue; toask.pb(vv[j]); } return Query(toask); }; for(int i=0;i<vv.size();){ if(i+1==vv.size()){ if(n<vv.size())vv.pop_back(); else i++; } else if(i+2==vv.size()){ if(f(i,-1,-1)){ swap(vv[i],vv.back()); vv.pop_back(); } else i++; }else{ if(f(i,i+1,i+2)){ vv.erase(vv.begin()+i,vv.begin()+i+3); }else{ if(f(i,-1,-1)){ vv.erase(vv.begin()+i,vv.begin()+i+1); }else if(++i&&f(i,-1,-1)){ vv.erase(vv.begin()+i,vv.begin()+i+1); }else if(++i&&f(i,-1,-1)){ vv.erase(vv.begin()+i,vv.begin()+i+1); } } } if(vv.size()==n)break; // vector<int>toask; // for(int j=0;j<vv.size();j++){ // if(i==j)continue; // toask.pb(vv[j]); // } // int k=Query(toask); // if(k==1){ // swap(vv[i],vv.back()); // vv.pop_back(); // i--; // } } for(int i:vv){ ok[i]=1; } Answer(vv); left-=n; } } // void Solve(int N, int M) { // std::vector<int> x(3); // x[0] = 1; // x[1] = 2; // x[2] = 3; // variable_example = Query(x); // for (int i = 0; i < M; i++) { // std::vector<int> a(N); // for (int j = 0; j < N; j++) { // a[j] = N * i + j + 1; // } // Answer(a); // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...