답안 #916125

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
916125 2024-01-25T10:47:04 Z GrindMachine Gap (APIO16_gap) C++17
15.4971 / 100
110 ms 16820 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x,y) ((x+y-1)/(y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a,b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a,b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(x) 42
#endif

/*

read some solutions a long time ago, slightly remember some ideas
may have still solved it if not for those ideas

*/

const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;

#include "gap.h"

ll n;

ll go(ll l, ll r){
	if(l >= r) return 0;

	// split into B segs
	ll B = n+1;
	ll len = r-l+1;
	ll cnt1 = B;
	ll cnt2 = len%B;
	cnt1 -= cnt2;

	vector<pll> segs;
	ll ptr = l;

	rep1(i,cnt1){
		if(len >= B){
			segs.pb({ptr,ptr+len/B-1});
		}
		ptr += len/B;
	}

	rep1(i,cnt2){
		segs.pb({ptr,ptr+ceil2(len,B)-1});
		ptr += ceil2(len,B);
	}

	// cout << "l = " << l << endl;
	// cout << "r = " << r << endl;
	// for(auto [lx,rx] : segs){
	// 	cout << lx << " " << rx << endl;
	// }

	assert(ptr == r+1);

	vector<pll> seg_vals;
	ll ans = 0;

	rep(i,sz(segs)){
		ll mn,mx;
		auto [lx,rx] = segs[i];
		MinMax(lx,rx,&mn,&mx);
		seg_vals.pb({mn,mx});
	}

	while(!segs.empty() and seg_vals.back().ff == -1){
		segs.pop_back();
		seg_vals.pop_back();
	}

	reverse(all(segs));
	reverse(all(seg_vals));

	while(!segs.empty() and seg_vals.back().ff == -1){
		segs.pop_back();
		seg_vals.pop_back();
	}

	reverse(all(segs));
	reverse(all(seg_vals));

	ll last_active = -1;

	for(auto [mn,mx] : seg_vals){
		if(mn != -1){
			if(last_active != -1){
				amax(ans,mn-last_active);
			}
			last_active = mx;
		}
	}

	if(count(all(seg_vals),make_pair<ll>(-1ll,-1ll)) == 0){
		ll lx = segs[0].ff;
		ll rx = segs.back().ss;
		amax(ans,go(lx,rx));
	}

	return ans;
}

long long findGap(int T, int n_)
{
	n = n_;
	return go(0,1e18);
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Incorrect 1 ms 2392 KB Output isn't correct
3 Incorrect 1 ms 2548 KB Output isn't correct
4 Incorrect 1 ms 2392 KB Output isn't correct
5 Incorrect 1 ms 2392 KB Output isn't correct
6 Incorrect 1 ms 2392 KB Output isn't correct
7 Incorrect 1 ms 2392 KB Output isn't correct
8 Incorrect 1 ms 2392 KB Output isn't correct
9 Incorrect 1 ms 2392 KB Output isn't correct
10 Incorrect 1 ms 2644 KB Output isn't correct
11 Incorrect 2 ms 2392 KB Output isn't correct
12 Incorrect 1 ms 2392 KB Output isn't correct
13 Incorrect 1 ms 2392 KB Output isn't correct
14 Incorrect 1 ms 2392 KB Output isn't correct
15 Incorrect 2 ms 2648 KB Output isn't correct
16 Incorrect 11 ms 3724 KB Output isn't correct
17 Incorrect 11 ms 3744 KB Output isn't correct
18 Incorrect 13 ms 3732 KB Output isn't correct
19 Incorrect 12 ms 3728 KB Output isn't correct
20 Incorrect 13 ms 5264 KB Output isn't correct
21 Incorrect 45 ms 7312 KB Output isn't correct
22 Incorrect 44 ms 7312 KB Output isn't correct
23 Incorrect 54 ms 7292 KB Output isn't correct
24 Incorrect 47 ms 7356 KB Output isn't correct
25 Incorrect 110 ms 16776 KB Output isn't correct
26 Incorrect 44 ms 7296 KB Output isn't correct
27 Incorrect 45 ms 7464 KB Output isn't correct
28 Incorrect 46 ms 7320 KB Output isn't correct
29 Incorrect 43 ms 7360 KB Output isn't correct
30 Incorrect 55 ms 13596 KB Output isn't correct
31 Incorrect 1 ms 2644 KB Output isn't correct
32 Incorrect 1 ms 2392 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 2688 KB Partially correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2392 KB Output is correct
4 Correct 0 ms 2392 KB Output is correct
5 Partially correct 1 ms 2392 KB Partially correct
6 Correct 1 ms 2392 KB Output is correct
7 Correct 0 ms 2392 KB Output is correct
8 Correct 1 ms 2392 KB Output is correct
9 Correct 0 ms 2392 KB Output is correct
10 Partially correct 1 ms 2392 KB Partially correct
11 Correct 1 ms 2392 KB Output is correct
12 Correct 1 ms 2392 KB Output is correct
13 Correct 1 ms 2392 KB Output is correct
14 Correct 2 ms 2392 KB Output is correct
15 Partially correct 2 ms 2648 KB Partially correct
16 Correct 11 ms 3728 KB Output is correct
17 Correct 11 ms 3728 KB Output is correct
18 Correct 11 ms 3728 KB Output is correct
19 Correct 11 ms 3724 KB Output is correct
20 Partially correct 16 ms 5228 KB Partially correct
21 Correct 50 ms 7316 KB Output is correct
22 Correct 44 ms 7316 KB Output is correct
23 Correct 45 ms 7308 KB Output is correct
24 Correct 44 ms 7324 KB Output is correct
25 Partially correct 110 ms 16820 KB Partially correct
26 Correct 44 ms 7296 KB Output is correct
27 Correct 47 ms 7312 KB Output is correct
28 Correct 44 ms 7316 KB Output is correct
29 Correct 45 ms 7316 KB Output is correct
30 Partially correct 56 ms 13684 KB Partially correct
31 Correct 1 ms 2392 KB Output is correct
32 Correct 1 ms 2392 KB Output is correct