Submission #1186775

#TimeUsernameProblemLanguageResultExecution timeMemory
1186775owoovoCounting Mushrooms (IOI20_mushrooms)C++20
80.71 / 100
3 ms604 KiB
#include "mushrooms.h" #include<bits/stdc++.h> #define F first #define S second using namespace std; int p[20010]; int query(vector<int> vc){ vector<int> ask=vc; for(auto &x:ask){ x=p[x]; } return use_machine(vc); } int count_mushrooms(int n) { for(int i=0;i<n;i++)p[i]=i; random_shuffle(&p[1],&p[n]); vector<int> a={0},b; // int x=93; // for(int i=1;i<=min(2*x,n-1);i++){ // int c=query({0,i}); // if(c==0)a.push_back(i); // else b.push_back(i); // } // int ans=a.size(),cnt=min(2*x,n-1)+1; int ans=a.size(),cnt=1; while(cnt<n){ vector<int> q; int xd=0,st=cnt; if(a.size()>=b.size()){ for(int i=0;i<a.size();i++){ if(cnt<n){ xd++; q.push_back(cnt); cnt++; } q.push_back(a[i]); } int ct=query(q); if(ct%2==0){ a.push_back(st); }else{ b.push_back(st); } int bs=(ct+1)/2; ans+=xd-bs; }else{ for(int i=0;i<b.size();i++){ if(cnt<n){ xd++; q.push_back(cnt); cnt++; } q.push_back(b[i]); } int ct=query(q); if(ct%2==0){ b.push_back(st); }else{ a.push_back(st); } int as=(ct+1)/2; ans+=as; } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...