제출 #1296220

#제출 시각아이디문제언어결과실행 시간메모리
1296220eri16버섯 세기 (IOI20_mushrooms)C++20
91.87 / 100
6 ms444 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=200;
        
    A.push_back(0);
    
    vector <int> cl;
    
    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);
        }
    }    
    
    if (A.size()>B.size()){cl=A;}
    else{cl=B;}
    
    for (int i=3; i<200 && i<n; i=i+2){
        vector <int> test;
        test.push_back(cl[0]);
        test.push_back(i);
        int kk=0;
        if (i+1<200 && i+1<n){kk=1;
        test.push_back(cl[1]);
        test.push_back(i+1);} 
        
        int tmans=use_machine(test);
        if (kk==0){
        if (cl[0]==0){
            if (tmans==0){A.push_back(i);ans++;}
            else{B.push_back(i);}
        }
        else{
            if (tmans==1){A.push_back(i);ans++;}
            else{B.push_back(i);}            
        }}
        else{
        if (cl[0]==0){
            if (tmans==0){A.push_back(i);A.push_back(i+1);ans=ans+2;}
            else if (tmans==1){A.push_back(i);B.push_back(i+1);ans=ans+1;}
            else if (tmans==2){B.push_back(i);A.push_back(i+1);ans=ans+1;}
            else {B.push_back(i);B.push_back(i+1);}
        }
        else{
            if (tmans==3){A.push_back(i);A.push_back(i+1);ans=ans+2;}
            else if (tmans==2){A.push_back(i);B.push_back(i+1);ans=ans+1;}
            else if (tmans==1){B.push_back(i);A.push_back(i+1);ans=ans+1;}
            else {B.push_back(i);B.push_back(i+1);}          
        }            
            
        }
    }
    
    vector <int> c;
    
    if (A.size()>B.size()){c=A;}
    else{c=B;}
    
    while (cur<n){
       
        vector <int> test;
         
        int prv=cur;
       
       
           vector <int> c;
    
        if (A.size()>B.size()){c=A;}
        else{c=B;}
       
        for (int i=0; i<c.size() && 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++;A.push_back(prv);}
            else{B.push_back(prv);}
            ans=ans+(cur-prv-1)-tmans/2;
        }
        else{
            if (tmans%2==1){ans++;A.push_back(prv);}
            else{B.push_back(prv);}
            ans=ans+tmans/2;
        }
        
    }  
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...