제출 #409349

#제출 시각아이디문제언어결과실행 시간메모리
409349Carmel_Ab1버섯 세기 (IOI20_mushrooms)C++17
56.93 / 100
12 ms640 KiB
#include <bits/stdc++.h>
#include "mushrooms.h"

//#include "stub.cpp"

using namespace std;

#define pb push_back
typedef vector<int> vi;
typedef long long ll;
int ceil(int a,int b){
    int ans=a/b;
    if(a%b)
        ans++;
    return ans;
}
int count_mushrooms(int n) {
    int ans=1;

    vi o,z,a(n,-1);
    a[0]=0;
    z.pb(0);

    if(n<=226){
        for(int i=1; i<n; i++)
            ans+=1- use_machine({0,i});
        return ans;
    }

    const int k=100;
    int first=1;
    for(int i=1; o.size()<k && z.size()<k;first++, i++){
        if(use_machine({0,i}))
            o.pb(i),a[i]=1;
        else
            ans++,z.pb(i),a[i]=0;
    }
    vi left;
    for(int i=first; i<n;i++)
        left.pb(i);

    if(o.size()>z.size()){
        for(int i=first,j=0; i<n;j=0, i++){
            vi cur;
            while(left.size() && cur.size()+2<=n && j<o.size()){
                cur.pb(o[j]);
                cur.pb(left.back());
                left.pop_back();
                j++;
            }
            if(cur.size()>=2)
                ans+= ceil(use_machine(cur),2);
        }
    }
    else{
        for(int i=first,j=0; i<n;j=0, i++){
            int in=0;
            vi cur;
            while(left.size() && cur.size()+2<=n && j<z.size()){
                cur.pb(z[j]);
                cur.pb(left.back());
                left.pop_back();
                j++;
                in++;
            }
            if(cur.size()>=2)
                ans+= in-ceil(use_machine(cur),2);
        }
    }

    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:45:46: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   45 |             while(left.size() && cur.size()+2<=n && j<o.size()){
      |                                  ~~~~~~~~~~~~^~~
mushrooms.cpp:45:54: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |             while(left.size() && cur.size()+2<=n && j<o.size()){
      |                                                     ~^~~~~~~~~
mushrooms.cpp:59:46: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   59 |             while(left.size() && cur.size()+2<=n && j<z.size()){
      |                                  ~~~~~~~~~~~~^~~
mushrooms.cpp:59:54: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             while(left.size() && cur.size()+2<=n && j<z.size()){
      |                                                     ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...