Submission #1302787

#TimeUsernameProblemLanguageResultExecution timeMemory
1302787sano버섯 세기 (IOI20_mushrooms)C++20
0 / 100
1 ms332 KiB
#include "mushrooms.h" #include <iostream> #include <cmath> #include <set> #define vec vector #define For(i, n) for(int i = 0; i < n; i++) using namespace std; void vypis(vec<int>&x){ for(auto i : x) cerr << i << ' '; cerr << endl; return; } int count_mushrooms(int n) { vec<int> odp(n+1, -1); odp[0] = 0; vec<int> mo; vec<int> p(2, 0); mo = {0, 1}; int x = use_machine(mo); if(n == 2){ if(x == 0) return 2; return 1; } odp[1] = x; mo = {1, 2}; x = use_machine(mo); if(x == 1) odp[2] = 1 - odp[1]; else odp[2] = odp[1]; int typ = 0; int p2 = 0; For(i, 3) if(odp[i] == 1) p2++; if(p2 > 1) typ = 1; mo.clear(); cerr << "typ " << typ << endl; For(i, 3){ p[odp[i]]++; if(odp[i] == typ && mo.size() < 2) mo.push_back(i); } vypis(mo); int som = -1; int odm = sqrt(n)+10; for (int i = 3; i < n; i+=2) { if(p[0] >= odm || p[1] >= odm){ som = i; break; } vec<int> nm; nm.push_back(mo[0]); nm.push_back(i); nm.push_back(mo[1]); if(i+1 < n) nm.push_back(i+1); x = use_machine(nm); if((x % 2) == 1){ odp[i+1] = 1 - typ; p[odp[i+1]]++; } else{ odp[i+1] = typ; p[odp[i+1]]++; } if(x > 1){ odp[i] = 1 - typ; p[odp[i]]++; } else{ odp[i] = typ; p[odp[i]]++; } } if(som == -1){ som = n; } typ = 0; mo.clear(); if(p[1] > p[0]) typ = 1; For(i, n){ if(odp[i] == typ) mo.push_back(i); } vypis(mo); int vel = mo.size(); cerr << "som " << som << endl; for(int i = som; i < n; i+=vel){ vec<int> nm; for(int j = i; j < n && j < (i+vel); j++){ nm.push_back(mo[j-i]); nm.push_back(j); } x = use_machine(nm); int dokopy = (nm.size())/2; int druhy = (x%2) + x/2; int prvy = dokopy - druhy; p[typ] += prvy; p[1-typ] += druhy; } //ak return p[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...