제출 #1247761

#제출 시각아이디문제언어결과실행 시간메모리
1247761sean503Brunhilda’s Birthday (BOI13_brunhilda)C++20
0 / 100
170 ms327680 KiB
#include<iostream> #include<vector> #include<cstdlib> #include<string> #include<algorithm> #include<set> #include<math.h> #include<map> #include<deque> #include<unordered_map> #include<iomanip> #include<queue> #include<array> #include<climits> #include<cstring> #include<unordered_set> #include<cstdint> #include<typeinfo> #include <random> using namespace std; #define int long long const int MAX = 1e7+1; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin>>n>>m; vector<int> v(MAX,1); vector<vector<int>> vec(MAX); int biggest = 0; int mul = 1; bool work = true; int small = INT_MAX; for(int i = 0; i<n; i++){ int x; cin>>x; small = min(small,x); mul *= x; if(mul > MAX){ work = false; } biggest = max(biggest,x); int temp = x; while(temp < MAX){ vec[temp].push_back(x); temp += x; } } if(!work){ mul = MAX+10; } vector<int> amt(MAX,0); int ind = 1; for(int i = small; i<=min(MAX,mul); i++){ for(int j = 0; j<vec[i].size(); j++){ if(i >= biggest){ amt[v[i-vec[i][j]]+1] ++; }else{ amt[v[i-vec[i][j]]] ++; } if(i-vec[i][j] != 0){ amt[v[i-vec[i][j]]] --; } } while(i >= biggest && amt[ind] == 0){ ind++; } if(i >= mul && work){ break; } if(i < biggest){ v[i] = 1; }else{ v[i] = ind+1; } } v[0] = 0; for(int i = 0; i<m; i++){ int x; cin>>x; if(x >= mul && work){ cout<<"oo"<<"\n"; continue; } cout<<v[x]<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...