Submission #1357810

#TimeUsernameProblemLanguageResultExecution timeMemory
1357810kenA Plus B (IOI23_aplusb)C++20
10 / 100
0 ms344 KiB
#include "aplusb.h"
#include <bits/stdc++.h>
using namespace std;

std::vector<int> smallest_sums(int N, std::vector<int> A, std::vector<int> B) {
	int pta = 1;
	int ptb = 1;
	int n = N;
	vector <int> disA;
	vector <int> disB;
	disA.push_back(1e9);
	for (int i=1; i<N; i++){
		disA.push_back(A[i] - A[i-1]);
	}
	//for (auto ii : disA)cout << ii << " ";cout << "\n";
	disB.push_back(1e9);
	for (int i=1; i<N; i++){
		disB.push_back(B[i] - B[i-1]);
	}
	//for (auto ii : disB)cout << ii << " ";cout << "\n";
	while(pta < n && ptb < n && pta * ptb < n){
		if(disA[pta] > disB[ptb]){
			disB[ptb+1] += disB[ptb];
			ptb++;
		}else if(disA[pta] < disB[ptb]){
			disA[pta+1] += disA[pta];
			pta++;
		}else{
			ptb++;
			pta++;
		}
	}
	while(pta * ptb < n && pta < n){
		pta++;
	}
	while(pta * ptb < n && ptb < n){
		ptb++;
	}
	//cout << pta << " " << ptb << "\n";
	vector <int> ann;
	for (int i=0; i<pta; i++){
		for (int j=0; j<ptb; j++){
			ann.push_back(A[i] + B[j]);
		}
	}
	sort(ann.begin(),ann.end());
	vector <int> ans;
	for (int i=0; i<ann.size() && i < N; i++){
		ans.push_back(ann[i]);
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...