제출 #761478

#제출 시각아이디문제언어결과실행 시간메모리
761478Khizri버섯 세기 (IOI20_mushrooms)C++17
92.62 / 100
7 ms448 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define F first #define S second #define INF 1e18 #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define pii pair<int,int> #define pll pair<ll,ll> #define OK cout<<"Ok"<<endl; #define MOD (ll)(1e9+7) const int mxn=2e4+5; int color[mxn]; int count_mushrooms(int n) { if(n<=490){ int ans=1; for(int i=1;i<n-1;i+=2){ vector<int>vt={i,0,i+1}; int k=use_machine(vt); ans+=(2-k); } if((n-1)%2){ vector<int>vt={n-1,0}; int k=use_machine(vt); ans+=(1-k); } return ans; } int k=90; vector<int>x,y; x.pb(0); int idx=0; for(int i=1;i<3;i++){ if(x.size()>=k||y.size()>=k) break; idx=i; vector<int>vt={0,i}; if(use_machine(vt)==0){ x.pb(i); color[i]=1; } else{ y.pb(i); color[i]=2; } } int t=1; int a,b; if(x.size()>=2){ a=x[0],b=x[1]; } else{ t=0; a=y[0],b=y[1]; } for(int i=3;i<n-1;i+=2){ if(x.size()>=k||y.size()>=k) break; idx=i+1; vector<int>vt={i,a,i+1,b}; int cnt=use_machine(vt); if(t){ if(cnt==0){ x.pb(i); x.pb(i+1); } else if(cnt==1){ y.pb(i); x.pb(i+1); } else if(cnt==2){ x.pb(i); y.pb(i+1); } else{ y.pb(i); y.pb(i+1); } } else{ if(cnt==0){ y.pb(i); y.pb(i+1); } else if(cnt==1){ x.pb(i); y.pb(i+1); } else if(cnt==2){ y.pb(i); x.pb(i+1); } else{ x.pb(i); x.pb(i+1); } } } int ok=0; int ans=x.size(); if(x.size()<y.size()){ swap(x,y); ok=1; } vector<int>qr; for(int i=idx+1;i<n;i++){ qr.pb(i); if(qr.size()==x.size()||i==n-1){ if(x.size()<y.size()){ swap(x,y); ok=1-ok; } vector<int>vt; for(int j=0;j<qr.size();j++){ vt.pb(qr[j]); vt.pb(x[j]); } int cnt=use_machine(vt); if(!ok){ int say=(cnt+1)/2; ans+=qr.size()-say; if(cnt%2==0){ x.pb(vt[0]); } else{ y.pb(vt[0]); } } else{ int say=(cnt+1)/2; ans+=say; if(cnt%2==0){ x.pb(vt[0]); } else{ y.pb(vt[0]); } } qr.clear(); } } return ans; }

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

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:37:20: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   37 |         if(x.size()>=k||y.size()>=k) break;
      |            ~~~~~~~~^~~
mushrooms.cpp:37:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   37 |         if(x.size()>=k||y.size()>=k) break;
      |                         ~~~~~~~~^~~
mushrooms.cpp:59:20: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   59 |         if(x.size()>=k||y.size()>=k) break;
      |            ~~~~~~~~^~~
mushrooms.cpp:59:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   59 |         if(x.size()>=k||y.size()>=k) break;
      |                         ~~~~~~~~^~~
mushrooms.cpp:115:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |             for(int j=0;j<qr.size();j++){
      |                         ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...