제출 #1072243

#제출 시각아이디문제언어결과실행 시간메모리
1072243Itamar버섯 세기 (IOI20_mushrooms)C++14
48.81 / 100
33 ms748 KiB
using namespace std; #include <vector> #define ll long long #define vll vector<ll> #include<iostream> #define vi vector<int> int use_machine(std::vector<int> x); #include<bitset> const int k = 15; int count_mushrooms(int n) { vi v[2]; v[0].push_back(0); /*v[use_machine({0,1})].push_back(1); if(n==2)return v[0].size(); v[use_machine({0,2})].push_back(2); if(n == 3)return v[0].size(); int i1,i2;*/ int ans = 0; bool f; int sq = min(n-1,130); int m= 1; for(int i = 1; i+k-2 < sq; i+=k-1){ vector<bitset<k>> b; for(int j = 0; j < (1<<k); j+=2){ bitset<k> bb = j; b.push_back(bb); } bitset<(1<<(k-1))>pos;for(int i = 0; i < 1<<(k-1); i++)pos[i]=1; vi ind = {0}; for(int j = i; j < i+k-1; j++)ind.push_back(j); while(pos.count()>1){ vi vec; vi r; for(int j = 0; j < k; j++)if(rand()%2)r.push_back(j); for(int i : r)vec.push_back(ind[i]); int c = use_machine(vec); for(int j = 0; j < (1<<(k-1)); j++){ int cc = 0; for(int t= 0; t < vec.size()-1; t++){ cc+=(b[j][r[t]]^b[j][r[t+1]]); } if(cc!=c)pos[j]=0; } } for(int j = 0; j < (1<<(k-1)); j++){ if(pos[j]){ for(int t= 1; t < k; t++){ v[(b[j][t])].push_back(ind[t]); } } } m = i+k-1; } ans = v[0].size(); f = (v[1].size() > v[0].size()); int s = v[f].size(); for(int i = m; i < n; i+=s){ int j = min(n-1, i+s-1); vi q; for(int k = i; k <= j; k++){ q.push_back(k); q.push_back(v[f][k-i]); } int c = use_machine(q); if(!f){ ans += q.size()/2; ans -= (c/2); ans -= (c%2); }else{ ans += c/2; ans+=c%2; } } return ans; }

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

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:40:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     for(int t= 0; t < vec.size()-1; t++){
      |                   ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...