제출 #1174781

#제출 시각아이디문제언어결과실행 시간메모리
1174781khanhphucscratch버섯 세기 (IOI20_mushrooms)C++20
56.78 / 100
3 ms428 KiB
#include "mushrooms.h"
#include<bits/stdc++.h>
using namespace std;
int an[20005];
/*int use_machine(vector<int> s)
{
    int ans = 0;
    for(int i = 1; i < s.size(); i++) ans += (an[s[i]] != an[s[i-1]]);
    return ans;
}*/
int count_mushrooms(int n)
{
    int ans = 1;
    if(n <= 200){
        for(int i = 1; i < n; i++) ans += 1-use_machine({0, i});
        return ans;
    }
    vector<int> a, b;
    a.push_back(0);
    for(int i = 1; i <= 200; i++){
        if(use_machine({0, i}) == 1) b.push_back(i);
        else{
            a.push_back(i);
            ans++;
        }
    }
    if(a.size() > 100){
        int p = 201;
        while(p < n){
            vector<int> truncate = {a[0]};
            int add = 0;
            for(int i = 1; i < a.size(); i++){
                if(p == n) break;
                truncate.push_back(p++);
                truncate.push_back(a[i]);
                add++;
            }
            ans += add - use_machine(truncate)/2;
        }
    }
    else{
        int p = 201;
        while(p < n){
            vector<int> truncate = {b[0]};
            for(int i = 1; i < b.size(); i++){
                if(p == n) break;
                truncate.push_back(p++);
                truncate.push_back(b[i]);
            }
            ans += use_machine(truncate)/2;
        }
    }
    return ans;
}
/*mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
signed main()
{
    int n, c = 0; cin>>n;
    for(int i = 0; i < n; i++){
        an[i] = rng()%2;
        if(i == 0) an[i] = 1;
        c += an[i];
    }
    cerr<<c<<" "<<count_mushrooms(n);
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...