Submission #1369169

#TimeUsernameProblemLanguageResultExecution timeMemory
1369169ChottuFGap (APIO16_gap)C++20
100 / 100
41 ms3216 KiB
#include "gap.h"
#include <bits/stdc++.h>
using namespace std;

#define int long long

long long findGap(signed T, signed N){
    
    if (T == 2){
        int mn = -1;
        int mx = -1;
        
        int one = 0;
        int two = 1e18;
        
        MinMax(one, two, &mn, &mx);
        //now we want to tile [one, two-1]
        
        int l = mx-mn;
        int x = (l+N-2)/(N-1);
        
        vector<int> all;
        
        int lft = mn+1;
        while (lft < mx){
            int rgt = min(lft+x-1, mx-1);
            int ff = -1;
            int gg = -1;
            MinMax(lft, rgt, &ff, &gg);
            if (ff != -1){
                all.push_back(ff);
                all.push_back(gg);
            }
            lft = rgt+1;
        }
        all.push_back(mx);
        all.push_back(mn);
        sort(all.begin(), all.end());
        int mxdif = -1;
        for (int i = 1; i<all.size(); i++){
            mxdif = max(mxdif, all[i]-all[i-1]);
        }
        return mxdif;
    }
    else if (T == 1){
        int mn = -1;
        int mx = -1;
        
        int one = 0;
        int two = 1e18;
        vector<int> all;
        while (one <= two && all.size() < N){
            MinMax(one, two, &mn, &mx);
            if (mn == -1) break;
            all.push_back(mn);
            if (mn != mx) all.push_back(mx);
            one = mn+1;
            two = mx-1;
        }
        sort(all.begin(), all.end());
        int mxdif = -1;
        for (int i = 1; i<all.size(); i++){
            mxdif = max(mxdif, all[i]-all[i-1]);
        }
        return mxdif;
    }
	return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...