제출 #1301828

#제출 시각아이디문제언어결과실행 시간메모리
1301828tamzidGap (APIO16_gap)C++20
30 / 100
2111 ms589824 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
using ll = long long;

long long findGap(int T, int N)
{
	if(T == 1) {
		vector<ll> a(N);
		ll l = 0, r = 1e18;
		int i = 0, j = N - 1;
		while(i <= j) {
			ll mn, mx;
			MinMax(l, r, &mn, &mx);
			a[i] = mn;
			a[j] = mx;
			l = mn + 1;
			r = mx - 1;
			++i;
			--j;
		}
		ll ans = 0;
		for(int i=0;i<N-1;++i)
			ans = max(ans, a[i + 1] - a[i]);
		return ans;
	} else {
		ll mn, mx, mx2;
		MinMax(0, 1e18, &mn, &mx);
		mx2 = mx;
		ll gap = (mx - mn + 1) / (1LL * N);
		ll cur = mn + 1;
		vector<ll> a;
		a.push_back(mn);
		if(mn != mx) {
			a.push_back(mx);
		}
		while(a.size() != N) {
			ll cur2 = cur, cur3 = cur + gap;
			while(cur <= cur2) {
				MinMax(cur2, cur3, &mn, &mx);
				if(mn == -1) {
					break;
				} else {
					if(mx != mx2) {
						a.push_back(mn);
					}
					if(mn != mx && mx != mx2) {
						a.push_back(mx);
					}
				}
				mn += 1;
				mx -= 1;
			}
			cur += gap;
		}
		sort(a.begin(), a.end());
		ll ans = 0;
		for(int i=0;i<N-1;++i)
			ans = max(ans, a[i + 1] - a[i]);
		return ans;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...