Submission #1018878

#TimeUsernameProblemLanguageResultExecution timeMemory
1018878coolboy19521Gap (APIO16_gap)C++17
30 / 100
3100 ms2248 KiB
#include "bits/stdc++.h"
#include "gap.h"

using namespace std;

const int sz = 1e5 + 5;

long long a[sz];

long long findGap(int T, int N)
{
	if (1 == T) {
		long long mn, mx;
		MinMax(0, 1e18, &mn, &mx);

		a[1] = mn;
		a[N] = mx;

		for (int i = 1; i <= (N+1)/2-1; i ++) {
			MinMax(mn+1, mx-1, &mn, &mx);
			a[i+1] = mn;
			a[N - i] = mx;
		}

		long long gp = 0;

		for (int i = 1; i <= N-1; i ++)
			gp = max(gp, a[i+1] - a[i]);

		return gp;
	} else {
        long long mn, mx;
        MinMax(0, 1e18, &mn, &mx);

        vector<long long> b = {mn, mx};

        long long k = (mx - mn + N-2) / (N-1);

        while (N != (int) b.size()) {
            long long d = mn + k;
        //    cout << mn+1 << ' ' << min(b[1]-1, mn + k+1) << '\n';
            int s = mn+1;
            int e = min(b[1]-1, mn + k+1);
            if (s > e) break;
            MinMax(s, e, &mn, &mx);
            if (-1 == mn) {
                mx = d;
                continue;
            } else if (mn == mx)
                b.push_back(mn);
            else {
                b.push_back(mn);
                b.push_back(mx);
                while (true) {
                    if (mn+1>mx-1) break;
          //          cout << mn+1 << ' ' << mx-1 << '\n';
                    MinMax(mn+1, mx-1, &mn, &mx);
                    if (-1 == mn) break;
                    if (mn == mx) {
                        b.push_back(mn);
                        break;
                    } else {
                        b.push_back(mn);
                        b.push_back(mx);
                    }
                }
                mx = d;
            }
            mn = mx + 1;
        }

        //for (int x : b)
//            cout << x << ' ';

  //      cout << '\n';

        sort(begin(b), end(b));

        long long gp = 0;

        for (int i = 0; i < N-1; i ++)
            gp = max(gp, b[i+1] - b[i]);

        return gp;
    }

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...