제출 #1357821

#제출 시각아이디문제언어결과실행 시간메모리
1357821vjudge1A Plus B (IOI23_aplusb)C++17
0 / 100
0 ms420 KiB
#include <bits/stdc++.h>
#include "aplusb.h"
using namespace std;
#define ll long long
int oa[100010], ob[100010];

vector<int> smallest_sums(int n, vector<int> a, vector<int> b)
{
	/*vector<int> c;
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			c.push_back({A[i] + B[j]});
		}
	}
	sort(c.begin(), c.end());
	for (int i = 0; i < N; i++) cout << c[i] << " "; cout << "\n";
	vector<int> col;
	for (int i = 1; i < N; i++){
		col.push_back({A[0] + B[i]});
		col.push_back({A[i] + B[0]});
	}
	col.push_back({A[0] + B[0]}); 
	sort(col.begin(), col.end());
	vector<int> ans;
	for (int i = 0; i < N; i++){
		ans.push_back(col[i]);
	}
	return ans;*/

	vector<int> ans;
	a.insert(a.begin(), 0);
	b.insert(b.begin(), 0);
	for (int i = 1; i <= n; i++){
		oa[i] = a[i];
		ob[i] = b[i];
		a[i] += a[i-1];
		b[i] += b[i-1];
	}
	int l = 1, r = n;
	int res = -1;
	while (l <= r){
		int mid = (l+r)/2;
		if (mid < n && (n+1)-mid < n){
			if (a[mid+1] < b[(n+1)-mid]) l = mid+1;
			else if (b[(n+1)-mid+1] < a[mid]) r = mid-1;
			else {
				res = mid;
				break;
			}
		}
		else if (mid == n){
			if (b[(n+1)-mid+1] < a[mid]) r = mid-1;
			else {
				res = mid;
				break;
			}
		}
		else if ((n+1)-mid == n){
			if (a[mid+1] < b[(n+1)-mid]) l = mid+1;
			else {
				res = mid;
				break;
			}
		}
	}
	/*cout << res << "\n";
	for (int i = 1; i <= res; i++) cout << oa[i] << " "; cout << "\n";
	for (int i = 1; i <= (n+1)-res; i++) cout << ob[i] << " "; cout << "\n";
	for (int i = 1; i <= res; i++) cout << a[i] << " "; cout << "\n";
	for (int i = 1; i <= (n+1)-res; i++) cout << b[i] << " "; cout << "\n";*/
	vector<int> all;
	for (int i = 1; i <= res; i++){
		for (int j = 1; j <= (n+1)-res; j++){
			all.push_back({oa[i] + ob[j]});
		}
	}
	sort(all.begin(), all.end());
	for (int i = 0; i < n; i++){
		ans.push_back(all[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...