Submission #1209889

#TimeUsernameProblemLanguageResultExecution timeMemory
1209889ansoriShortcut (IOI16_shortcut)C++20
71 / 100
286 ms1348 KiB
#include "shortcut.h"
#include<bits/stdc++.h>
#define ll long long
const int N = 3e3 + 5;
const ll inf = 1e16;
using namespace std;
ll ans , C;
vector<ll> ds;
vector<int> l , d;
bool ok(ll dst){
	ll mndif = -inf , mxdif = inf , mnsum = -inf , mxsum = inf; 
	int n = d.size();
	for(int i = 0;i < n; ++ i){
		for(int j = i + 1;j < n; ++ j){
			if(ds[j] - ds[i] + d[j] + d[i] <= dst) continue ;
			ll dif = dst - d[i] - d[j] - C;
			mndif = max(mndif , ds[j] - ds[i] - dif);
			mxdif = min(mxdif , ds[j] - ds[i] + dif);
			mnsum = max(mnsum , ds[j] + ds[i] - dif);
			mxsum = min(mxsum , ds[j] + ds[i] + dif);
		}
	}
	for(int i = 0;i < n; ++ i){
		for(int j = i + 1;j < n; ++ j){
			if(ds[j] - ds[i] < mndif) continue ;
			if(ds[j] - ds[i] > mxdif) continue ;
			if(ds[j] + ds[i] < mnsum) continue ;
			if(ds[j] + ds[i] > mxsum) continue ;
			return 1;
		}
	}
	return 0;
}
long long find_shortcut(int n, std::vector<int> lenth, std::vector<int> dist , int c)
{
	C = c;
	l = lenth;
	d = dist;
	if(n > 3e3){
		//XD
		return -1;
	}
	ds = vector<ll> (n , 0);
	for(int i = 1;i < n; ++ i) ds[i] = ds[i - 1] + l[i - 1];
	ll l = 0;
	ll r = inf + 1;
	while(l + 1 < r){
		ll mid = (l + r) / 2;
		if(ok(mid)) r = mid;
		else l = mid;
	}
    return r;
}

Compilation message (stderr)

shortcut.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
shortcut_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...