답안 #1058522

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1058522 2024-08-14T10:31:57 Z epicci23 드문 곤충 (IOI22_insects) C++17
0 / 100
197 ms 3356 KB
#include "bits/stdc++.h"
#include "insects.h"
#define all(v) v.begin() , v.end()
#define sz(a) (int)a.size()
using namespace std;
 
 
vector<int> mach;
void clear_mach(){
  while(!mach.empty()){
    move_outside(mach.back());
    mach.pop_back();
  }
}
 
int solve_paralel(vector<int> cand){
   if(sz(cand)==1) return 1;
   mach.push_back(0);
   move_inside(0);
   vector<int> tk,hm;
   tk.push_back(0);
   for(int i=1;i<sz(cand);i++){
     move_inside(i);
     mach.push_back(i);
     if(press_button()==1) tk.push_back(i);
     else{
        hm.push_back(i);
        move_outside(i);
        mach.pop_back();
     }
   } 
   int n=sz(tk),m=sz(hm);
   if(n==1) return sz(cand);
   if(m<n) return 1;
   int L[m],R[m];
   for(int i=0;i<m;i++){
    L[i]=0;
    R[i]=n-1;
   }

   for(int j=0;j<=__lg(n);j++){
     clear_mach();
     vector<int> dene[n];
     for(int i=0;i<m;i++) if(L[i]!=R[i]) dene[(L[i]+R[i])/2].push_back(i);
     for(int i=0;i<n;i++){
       move_inside(tk[i]);
       mach.push_back(tk[i]);
       for(int x:dene[i]){
         move_inside(hm[x]);
         mach.push_back(hm[x]);
         if(press_button()==2) R[x]=i;
         else L[x]=i+1;
         move_outside(hm[x]);
         mach.pop_back();
       }
     }
   }
 
   int ans=sz(cand);
   vector<int> mark(n,1);
   for(int i=0;i<m;i++) mark[L[i]]++;
   for(int i=0;i<n;i++) ans=min(ans,mark[i]);
   return ans;
}
 
int check_ans(vector<int> cand,int l,int r){
  int K = l+sqrtl(r-l);
  clear_mach();
  mach.push_back(0);
  move_inside(0);
  vector<int> takla;
  for(int i=1;i<sz(cand);i++){
    mach.push_back(i);
    move_inside(i);
    if(press_button()>=K){
     takla.push_back(i);
     move_outside(i);
     mach.pop_back();
    }
  }
  clear_mach();
  for(int x:takla){
    move_inside(x);
    mach.push_back(x);
    if(press_button()==2){
      move_outside(x);
      mach.pop_back();
    }
  }
  vector<int> buyuk,kucuk;
  for(int x:takla) buyuk.push_back(x);
  clear_mach();
  for(int x:cand){
    move_inside(x);
    mach.push_back(x);
    if(press_button()==2) buyuk.push_back(x);  
    else kucuk.push_back(x);
    move_outside(x);
    mach.pop_back();
  } 
  if(kucuk.empty()) return solve_paralel(cand);
  else return check_ans(cand,l,K-1);
}

 
int min_cardinality(int n){
   vector<int> res;
   for(int i=0;i<n;i++) res.push_back(i);
   return check_ans(res,1,n); 
}
 
/*void _(){
    
}
 
int32_t main(){
  cin.tie(0); ios::sync_with_stdio(0);
  int tc=1;//cin >> tc;
  while(tc--) _();
  return 0;
}*/
# 결과 실행 시간 메모리 Grader output
1 Incorrect 188 ms 3356 KB Too many queries.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 188 ms 3356 KB Too many queries.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 197 ms 1232 KB Too many queries.
2 Halted 0 ms 0 KB -