# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
840097 | 2023-08-31T06:39:31 Z | Faisal_Saqib | A Plus B (IOI23_aplusb) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; vector<int> smallest_sum(int n,vector<int> a,vector<int> b) { vector<int> ans; int can[a.size()]; int n=a.size(); int m=b.size(); for(int i=0;i<n;i++) { can[i]=0; } set<pair<int,pair<int,int>>> pq; pq.insert({a[0]+b[0],{0,0}}); while(ans.size()<(k) and pq.size()>0) { auto p=*begin(pq); pq.erase(begin(pq)); ans.push_back(p.first); if(p.second.first< (n-1)){ pq.insert({a[p.second.first+1]+b[can[p.second.first+1]],{p.second.first+1,can[p.second.first+1]}}); } if(p.second.second< (m-1)) { pq.insert({a[p.second.first]+b[p.second.second+1],{p.second.first,p.second.second+1}}); can[p.second.first]+=1; } } return ans; }