Submission #1105728

#TimeUsernameProblemLanguageResultExecution timeMemory
1105728azberjibiouCounting Mushrooms (IOI20_mushrooms)C++17
Compilation error
0 ms0 KiB
#include "mushrooms.h" #include <bits/stdc++.h> #define all(v) v.begin(), v.end() #define pb push_back #define lb lower_bound #define gibon ios::sync_with_stdio(false); cin.tie(0); #define fi first #define se second #define pii pair<int, int> #define pll pair<ll, ll> typedef long long ll; using namespace std; const int mxN=505; const int mxM=2200005; const int mxK=61; const int MOD=1e9+7; const ll INF=1e18; const int C=80; vector <int> A, B; int cntA; int idx=1; void check_one(){ int val=use_machine(vector <int>{0, idx}); if(val==0) A.push_back(idx); else B.push_back(idx); idx++; } void check_two(){ assert(A.size()>=2 || B.size()>=2); bool swp=false; if(A.size()<2){ swp=true; swap(A, B); } int val=use_machine(vector <int> {A[0], idx, A[1], idx+1}); if(val%2==1) B.push_back(idx+1); else A.push_back(idx+1); if(val>=2) B.push_back(idx); else A.push_back(idx); idx+=2; if(swp) swap(A, B); } void check_C(){ bool swp=false; if(A.size()<B.size()){ swp=true; swap(A, B); } vector <int> v; for(int i=0;i<A.size();i++){ v.push_back(A[i]); v.push_back(idx+i); } int val=use_machine(v); int sz=A.size(); //end element if(val%2==0) A.push_back(idx+sz-1); else B.push_back(idx+sz-1); //middle element if(swp) cntA+=val/2; else cntA+=sz-1-val/2; //maintain idx, A, B idx+=sz; if(swp) swap(A, B); } void check_end(int n){ bool swp=false; if(A.size()<B.size()){ swp=true; swap(A, B); } vector <int> v; for(int i=0;i<A.size();i++){ v.push_back(A[i]); if(idx+i<n) v.push_back(idx+i); } int val=use_machine(v); int sz=A.size(), cnt_mid=min(n-idx, sz-1); if(n==idx+sz){ if(val%2==0) A.push_back(idx+sz-1); else B.push_back(idx+sz-1); } if(swp) cntA+=val/2; else cntA+=cnt_mid-val/2; if(swp) swap(A, B); idx=n; } int count_mushrooms(int n) { A.push_back(0); check_one(); if(n==2) return A.size(); if(A.size()==1) check_one(); while(A.size()<C && B.size()<C){ if(idx==n) return A.size(); else if(idx==n-1) check_one(); else check_two(); } while(idx<n){ if(n-idx<=max(A.size(), B.size())) check_end(n); else if(abs(A.size()-B.size())<=5 && A.size()<80) check_two(); else check_C(); } return A.size()+cntA; }

Compilation message (stderr)

mushrooms.cpp: In function 'void check_C()':
mushrooms.cpp:50:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |     for(int i=0;i<A.size();i++){
      |                 ~^~~~~~~~~
mushrooms.cpp: In function 'void check_end(int)':
mushrooms.cpp:73:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |     for(int i=0;i<A.size();i++){
      |                 ~^~~~~~~~~
mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:99:17: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
   99 |         if(n-idx<=max(A.size(), B.size())) check_end(n);
      |            ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
mushrooms.cpp:100:38: error: call of overloaded 'abs(std::vector<int>::size_type)' is ambiguous
  100 |         else if(abs(A.size()-B.size())<=5 && A.size()<80) check_two();
      |                                      ^
In file included from /usr/include/c++/10/bits/std_abs.h:38,
                 from /usr/include/c++/10/cmath:47,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from mushrooms.cpp:2:
/usr/include/stdlib.h:840:12: note: candidate: 'int abs(int)'
  840 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |            ^~~
In file included from /usr/include/c++/10/cmath:47,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from mushrooms.cpp:2:
/usr/include/c++/10/bits/std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
   79 |   abs(long double __x)
      |   ^~~
/usr/include/c++/10/bits/std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
   75 |   abs(float __x)
      |   ^~~
/usr/include/c++/10/bits/std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
   71 |   abs(double __x)
      |   ^~~
/usr/include/c++/10/bits/std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |   ^~~
/usr/include/c++/10/bits/std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |   ^~~