답안 #278580

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
278580 2020-08-21T14:54:53 Z eohomegrownapps Shortcut (IOI16_shortcut) C++14
0 / 100
1 ms 324 KB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll find_shortcut(int n, vector<int> l, vector<int> d, int c){
	vector<ll> pathlength(n);
	for (ll i = 1; i<n; i++){
		pathlength[i]=pathlength[i-1]+l[i-1];
	}

	vector<ll> prefixmax(n);
	vector<ll> suffixmax(n);
	prefixmax[0]=pathlength[n-1]-pathlength[0]+d[0];
	for (ll i = 1; i<n; i++){
		prefixmax[i]=max(prefixmax[i-1],d[i]+pathlength[n-1]-pathlength[i]);
	}
	for (ll i = 0; i<n; i++){
		prefixmax[i]-=pathlength[n-1]-pathlength[i];
	}
	suffixmax[n-1]=pathlength[n-1]-pathlength[0]+d[n-1];
	for (ll i = n-2; i>=0; i--){
		suffixmax[i]=max(suffixmax[i+1],d[i]+pathlength[i]-pathlength[0]);
	}
	for (ll i = 0; i<n; i++){
		suffixmax[i]-=pathlength[i]-pathlength[0];
	}

	vector<ll> endspluspath(n);
	vector<ll> endsminuspath(n);
	for (ll i = 0; i<n; i++){
		endspluspath[i]=d[i]+pathlength[i];
		endsminuspath[i]=d[i]-pathlength[i];
	}
	ll mindist = 1e18;
	/*for (int i : prefixmax){
		cout<<i<<' ';
	}cout<<'\n';
	for (int i : suffixmax){
		cout<<i<<' ';
	}cout<<'\n';*/
	for (ll a = 0; a<n-1; a++){
		for (ll b = a+1; b<n; b++){
			//try express road linking a and b
			ll mxdist = 0;
			//try thing-on-left to thing-on-right
			mxdist = min(ll(c),pathlength[b]-pathlength[a])+suffixmax[b]+prefixmax[a];
			//try thing-on-left to middle, thing-on-right to middle

			//segmenttree-ify
			for (ll x = a; x<=b; x++){
				mxdist = max(mxdist,
					min(
						pathlength[b]-pathlength[x],
						pathlength[x]-pathlength[a]+c
						) + suffixmax[b] + d[x]);
				mxdist = max(mxdist,
					min(
						pathlength[b]-pathlength[x]+c,
						pathlength[x]-pathlength[a]
						) + prefixmax[a] + d[x]);
			}
		
			//try thing-on-middle to thing-on-middle
			for (ll m = a; m<b; m++){
				for (ll n = a+1; n<=b; n++){
					//from m to n
					mxdist = max(mxdist,
						min(
							c+pathlength[b]-pathlength[n]+pathlength[m]-pathlength[a],
							pathlength[n]-pathlength[m]
						)+d[n]+d[m]);
				}
			}
			//cout<<a<<' '<<b<<": "<<mxdist<<'\n';
			mindist = min(mindist, mxdist);
		}
	}
    return mindist;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 4, 80 is a correct answer
2 Correct 0 ms 256 KB n = 9, 110 is a correct answer
3 Correct 1 ms 324 KB n = 4, 21 is a correct answer
4 Correct 1 ms 256 KB n = 3, 4 is a correct answer
5 Incorrect 0 ms 256 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -