답안 #117141

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
117141 2019-06-15T01:05:52 Z Lawliet Shortcut (IOI16_shortcut) C++14
0 / 100
3 ms 384 KB
#include <bits/stdc++.h>
#include "shortcut.h"

//colocar grader

#define MAX 1000010
#define INF 1000000000000000000LL

using namespace std;
typedef pair<int,int> pii;
typedef long long int lli;

int N, C;

lli L[MAX];
lli D[MAX];
lli sL[MAX];
lli mxLeft[MAX];
lli mxRight[MAX];
lli prefixDist[MAX];
lli suffixDist[MAX];

lli dist(int i, int j) { return sL[j - 1] - sL[i - 1]; }

void init()
{
	for(int g = 1 ; g <= N - 1 ; g++)
		sL[g] = sL[g - 1] + L[g];

	for(int g = 1 ; g <= N ; g++)
		mxLeft[g] = max(mxLeft[g - 1] , D[g - 1]) + L[g - 1];

	for(int g = N ; g >= 1 ; g--)
		mxRight[g] = max(mxRight[g + 1] , D[g + 1]) + L[g];

	for(int i = 1 ; i <= N ; i++)
		suffixDist[i] = max(suffixDist[i + 1] , mxRight[i] + D[i]);

	for(int i = 1 ; i <= N ; i++)
		prefixDist[i] = max(prefixDist[i - 1] , mxLeft[i] + D[i]);
}

long long int find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c)
{
	N = n;

	for(int g = 0 ; g < n - 1 ; g++) L[g + 1] = l[g];
	for(int g = 0 ; g < n ; g++) D[g + 1] = d[g];

	init();

	lli ans = INF;

	for(int i = 1 ; i <= n ; i++)
	{
		for(int j = i + 1 ; j <= n ; j++)
		{
			lli ansIJ = -1;

			ansIJ = max(prefixDist[i] , suffixDist[j]);

			//if(i != 2 || j != 3) continue;

			//printf("i = %d  j = %d      %lld  %lld\n",i,j,prefixDist[i],suffixDist[j]);

			lli cnt = dist(i , j);

			for(int myPoint = i ; myPoint <= j ; myPoint++)
			{
				lli distance;

				if(myPoint != i)
				{
					distance = dist(i , myPoint);
					distance = min(distance , c + cnt - distance);

					ansIJ = max(ansIJ , mxLeft[i] + distance + D[myPoint] );

					//printf("my = %d      %lld %lld %lld\n",myPoint,mxLeft[i], distance,D[myPoint]);
				}

				for(int g = i + 1 ; g < j ; g++)
				{
					if(g == myPoint) continue;

					distance = dist(g , myPoint);
					if(distance < 0) distance = -distance;
					distance = min(distance , c + cnt - distance);

					ansIJ = max(ansIJ , D[g] + distance + D[myPoint] );
				}

				if(myPoint != j)
				{
					distance = dist(myPoint , j);
					distance = min(distance , c + cnt - distance);

					ansIJ = max(ansIJ , D[myPoint] + distance + mxRight[j] );

					//printf("- my = %d      %lld %lld %lld\n",myPoint,mxRight[j], distance,D[myPoint]);
				}
			}

			//ansIJ = max(ansIJ , mxLeft[i - 1] + L[i - 1] + D[i]);
			//ansIJ = max(ansIJ , mxRight[j + 1] + L[j] + D[j]);
			ansIJ = max(ansIJ , min(cnt , (long long int) c) + max(mxRight[j],D[j]) + max(mxLeft[i],D[i]));

			//printf("------------------------------ i = %d  j = %d     %d     %d %d\n",i,j,ansIJ,max(mxRight[j],D[j]),max(mxLeft[i],D[i]));

			ans = min(ans , ansIJ);
		}
	}

	return ans;
}

/*int main()
{
	scanf("%d %d",&N,&C);

	vector<int> dd(N), ll(N - 1);

	for(int g = 0 ; g < N - 1 ; g++)
		scanf("%d",&ll[g]);

	for(int g = 0 ; g < N ; g++)
		scanf("%d",&dd[g]);

	printf("%lld\n",find_shortcut(N , ll , dd , C));
}*/
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB n = 4, 80 is a correct answer
2 Correct 2 ms 384 KB n = 9, 110 is a correct answer
3 Correct 2 ms 384 KB n = 4, 21 is a correct answer
4 Correct 2 ms 384 KB n = 3, 4 is a correct answer
5 Correct 2 ms 384 KB n = 2, 62 is a correct answer
6 Correct 2 ms 384 KB n = 2, 3 is a correct answer
7 Correct 2 ms 384 KB n = 3, 29 is a correct answer
8 Correct 2 ms 384 KB n = 2, 3 is a correct answer
9 Correct 3 ms 384 KB n = 2, 3 is a correct answer
10 Correct 2 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 2 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 2 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 2 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 2 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 2 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 2 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 2 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 2 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 2 ms 384 KB n = 5, 12 is a correct answer
21 Correct 2 ms 384 KB n = 5, 25 is a correct answer
22 Correct 2 ms 384 KB n = 2, 122 is a correct answer
23 Incorrect 2 ms 384 KB n = 10, incorrect answer: jury 117 vs contestant 110
24 Halted 0 ms 0 KB -