Submission #1296169

#TimeUsernameProblemLanguageResultExecution timeMemory
1296169eri16Counting Mushrooms (IOI20_mushrooms)C++20
0 / 100
1 ms408 KiB
#include "mushrooms.h"
#include <bits/stdc++.h>

using namespace std;

int count_mushrooms(int n){
    
    vector <int> A;
    vector <int> B;
    
    int ans=1;
    int cur=150;
        
    A.push_back(0);
    
    for (int i=1; i<3 && i<n; i++){
        vector <int> test;
        test.push_back(0);
        test.push_back(i);
        if (use_machine(test)==0){
            A.push_back(i);
            ans++;
        }
        else{
            B.push_back(i);
        }
    }
    
    vector <int> c;
    
    if (A.size()>B.size()){c=A;}
    else{c=B;}
    
    for (int i=3; i<200 && i<n; i=i+2){
        vector <int> test;
        test.push_back(i);
        test.push_back(c[0]);
        if (i+1<100 && i+1<n){test.push_back(i+1);test.push_back(c[1]);}
        
        int tmans=use_machine(test);
        
        if (c[0]==0){
            if (tmans==0){A.push_back(i);ans++;
                if (i+1<100 && i+1<n){A.push_back(i+1);ans++;}
            }
            if (tmans==1){
                B.push_back(i);
                if (i+1<100 && i+1<n){B.push_back(i+1);ans++;}
            }
            if (tmans==2){
                A.push_back(i);ans++;
                if (i+1<100 && i+1<n){A.push_back(i+1);}
            }            
            if (tmans==3){
                B.push_back(i);
                if (i+1<100 && i+1<n){B.push_back(i+1);}                
            }
        }
        else{
            if (tmans==3){A.push_back(i);ans++;
                if (i+1<100 && i+1<n){A.push_back(i+1);ans++;}
            }
            if (tmans==2){
                B.push_back(i);
                if (i+1<100 && i+1<n){B.push_back(i+1);ans++;}
            }
            if (tmans==1){
                A.push_back(i);ans++;
                if (i+1<100 && i+1<n){A.push_back(i+1);}
            }            
            if (tmans==0){
                B.push_back(i);
                if (i+1<100 && i+1<n){B.push_back(i+1);}                
            }
        }
    }    
    
    if (A.size()>B.size()){c=A;}
    else{c=B;}    
    
    while (cur<n){
       
        vector <int> test;
         
        int prv=cur;
       
        for (int i=0; i<100 && cur<n; i++){
           test.push_back(cur);
           test.push_back(c[i]);
           cur++;
        }
        
        int tmans=use_machine(test);
        
        if (c[0]==0){
            if (tmans%2==0){ans++;}
            ans=ans+(cur-prv-1)-tmans/2;
        }
        else{
            if (tmans%2==1){ans++;}
            ans=ans+tmans/2;
        }
        
    }  
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...