Submission #346326

#TimeUsernameProblemLanguageResultExecution timeMemory
346326lLab_버섯 세기 (IOI20_mushrooms)C++14
92.62 / 100
10 ms492 KiB
#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> A = {0};
vector<int> B;

int count_mushrooms(int n) {
    int sum = 1;
    int i=1;
    while(i<166&&i<n){
        vector<int> S;
        int nA = A.size();
        int cnt = 0;
        for(int j=0;j<min(nA,2)&&i<n;++j){
            S.push_back(A[j]);
            S.push_back(i);
            i++;
            cnt++;
        }
        int d = use_machine(S);
        sum += cnt-(d+1)/2;
        if(d == 0 && cnt == 2){
            A.push_back(i-2);
            A.push_back(i-1);
        }
        else if(d == 1 && cnt == 2){
            A.push_back(i-2);
            B.push_back(i-1);
        }
        else if(d%2 == 0 && cnt == 2){
            A.push_back(i-1);
            B.push_back(i-2);
        }else if(cnt == 2){
            B.push_back(i-1);
            B.push_back(i-2);
        }else if(d%2 == 0){
            A.push_back(i-1);
        }else{
            B.push_back(i-1);
        }
    }
    while(i<n){
        vector<int> S;
        int nA = A.size();
        int nB = B.size();
        int cnt = 0;
        for(int j=0;j<max(nA,nB)&&i<n;++j){
            if(nA >= nB) S.push_back(A[j]);
            else S.push_back(B[j]);
            S.push_back(i);
            i++;
            cnt++;
        }
        int d = use_machine(S);
        if(nA>=nB) sum += cnt-(d+1)/2;
        else sum += (d+1)/2;
        if(nA >= nB){
            if(d%2 == 0) A.push_back(i-1);
            else B.push_back(i-1);
        }else{
            if(d%2 == 0) B.push_back(i-1);
            else A.push_back(i-1);
        }
    }
    return sum;
}

#Verdict Execution timeMemoryGrader output
Fetching results...