Submission #796944

#TimeUsernameProblemLanguageResultExecution timeMemory
796944vjudge1Counting Mushrooms (IOI20_mushrooms)C++17
49.56 / 100
7 ms312 KiB
#include "mushrooms.h"
#include<bits/stdc++.h>
using namespace std;
#define X 137
int count_mushrooms(int n) {
	if(n<500) {
        int ans = 0;
        n--;
        for(int i = 1; i <= n/2;i++)
            ans+=use_machine({i*2-1,0,i*2});
        if(n%2) ans+=use_machine({0,n});
        return n+1-ans;
    }
    vector<int> good;
    int second = 0;
    if(!use_machine({0,1}))
        second = 1, good.push_back(1);
    if(!use_machine({0,2}))
        second = 2, good.push_back(2);
    if(!second)
        good = {1,2};
    else
        good.push_back(0);
    for(int i = 3; i < 2*X-1; i+=2) {
        int res = use_machine({i,good[0],i+1,good[1]});
        if(res%2-1)
            good.push_back(i);
        if(res<2)
            good.push_back(i+1);
    }
    int ans = 0;
    for(int i = 2*X-1; i < n; i+=good.size()) {
        int r = min(n, i+(int)good.size());
        vector<int> v;
        for(int j = i; j < r; j++) {
            v.push_back(j);
            v.push_back(good[j-i]);
        }
        int x = use_machine(v);
        ans+=x%2;
        ans+=x/2;
    }
    ans = n-2*X+1-ans+good.size();
    if(second)
        return ans;
    return n - ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...