Submission #661227

#TimeUsernameProblemLanguageResultExecution timeMemory
661227perchutsCounting Mushrooms (IOI20_mushrooms)C++17
92.62 / 100
10 ms340 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define sz(x) (int) x.size() #define endl '\n' #define pb push_back #define _ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #include "mushrooms.h" using namespace std; template<typename X,typename Y> bool ckmin(X& x,Y y){return (x>y?x=y,1:0);} using ii = pair<int,int>; int use_machine(vector<int> x); int count_mushrooms(int n){ vector<int>m; vector<vector<int>>v(2,vector<int>()); int k = (n<=500?100:88), x, y, type = 0; if(n<=226){ int ans = 1; for(int i=1;i<n;++i)ans += (1 - use_machine({0,i})); return ans; } v[0].pb(0); int r1 = use_machine({0,1}), r2 = use_machine({0,2}); if(r1)v[1].pb(1); else v[0].pb(1); if(r2)v[1].pb(2); else v[0].pb(2); if(!r1)x = 0, y = 1; else if(!r2)x = 0, y = 2; else x = 1, y = 2, type = 1; for(int i=3;i<2*k-1;i+=2){ assert(i+1<n); int cur = use_machine({i,x,i+1,y}); if(cur&1)v[type^1].pb(i); else v[type].pb(i); if(cur>=2)v[type^1].pb(i+1); else v[type].pb(i+1); } //deve dar uns 80 pontos int target = (sz(v[0])>=k?0:1), ans = sz(v[0]); for(int i=2*k-1;i<n;i+=k){ if(sz(v[target^1])>sz(v[target]))target ^= 1; k = sz(v[target]); vector<int>ask; for(int j=0;j<k&&i+j<n;++j){ ask.pb(i+j), ask.pb(v[target][j]); } int cur = use_machine(ask); if(cur&1)v[target^1].pb(i); else v[target].pb(i); if(target==1)ans += (cur+1)/2; else ans += min(n-i,k) - (cur+1)/2; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...