Submission #1031641

# Submission time Handle Problem Language Result Execution time Memory
1031641 2024-07-23T03:02:52 Z pcc Shortcut (IOI16_shortcut) C++17
0 / 100
14 ms 1372 KB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC taget("avx2,popcnt,sse4")

#define pll pair<ll,ll>
#define fs first
#define sc second
#define pii pair<int,int>
#define ll long long

#define DEBUG(T) cerr<<#T<<":"<<T<<endl;

const ll inf = 1e18;
const int mxn = 3030;
ll pref[mxn];
ll arr[mxn];
int C,N;
int trans[mxn];
ll dp[mxn][mxn];
ll P[mxn],S[mxn];
ll pans[mxn],sans[mxn];

ll brr[mxn];

ll chain(ll R,int s,int e){
	return pref[e]-pref[s]+brr[e]+brr[s];
}
ll cycle(ll R,int s,int e){
	return R+C-(pref[e]-pref[s])+brr[s]+brr[e];
}

ll calc(int a,int b){
	if(a == b)return pans[N-1];
	for(int i = a;i<=b;i++)brr[i] = arr[i];
	brr[a] = P[a],brr[b] = S[b];
	ll ans = *max_element(brr+a,brr+b+1);
	ans = max({ans,pans[a],sans[b]});
	ll cyc = -inf;
	ll R = pref[b]-pref[a];
	ll re = 0;
	int ptr = a;
	multiset<ll> st;
	st.insert(-inf);
	for(int i = a;i<=b;i++){
		while(ptr<i&&cycle(R,ptr,i)<chain(R,ptr,i)){
			st.erase(st.find(brr[ptr]-pref[ptr]));
			cyc = max(cyc,brr[ptr]+pref[ptr]);
			ptr++;
		}
		ll chn = *st.rbegin();
		ans = max({ans,pref[i]+brr[i]+chn,cyc+brr[i]-pref[i]+R+C});
		st.insert(brr[i]-pref[i]);
	}
	return ans;
}

void init(){
	ll pp = -inf;
	for(int i = 0;i<N;i++){
		pans[i] = arr[i];
		if(i)pans[i] = max(pans[i],pans[i-1]);
		pans[i] = max(pans[i],arr[i]+pref[i]+pp);
		pp = max(pp,-pref[i]+arr[i]);
	}
	pp = -inf;
	for(int i = N-1;i>=0;i--){
		sans[i] = arr[i];
		if(i != N-1)sans[i] = max(sans[i],sans[i+1]);
		sans[i] = max(sans[i],arr[i]-pref[i]+pp);
		pp = max(pp,pref[i]+arr[i]);
	}
	P[0] = arr[0];S[N-1] = arr[N-1];
	for(int i = 1;i<N;i++)P[i] = max(P[i-1]+pref[i]-pref[i-1],arr[i]);
	for(int i = N-2;i>=0;i--)S[i] = max(S[i+1]+pref[i+1]-pref[i],arr[i]);
}

long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c){
	N = n,C = c;
	for(int i = 0;i<N;i++)arr[i] = d[i];
	for(int i = 0;i+1<N;i++){
		pref[i+1] = pref[i]+l[i];
	}
	init();

	ll ans = inf;
	for(int i = 0;i<N;i++){
		for(int j = 0;j<=i;j++){
			dp[j][i] = calc(j,i);
			ans = min(ans,dp[j][i]);
		}
	}
	for(int i = 1;i<N;i++){
		for(int j = 0;j<i;j++){
			if(dp[trans[i]][i]<=dp[j][i])trans[i] = j;
		}
	}
	for(int i = 1;i<N;i++){
		assert(trans[i] >= trans[i-1]);
	}
	return ans;
}

Compilation message

shortcut.cpp:6: warning: ignoring '#pragma GCC taget' [-Wunknown-pragmas]
    6 | #pragma GCC taget("avx2,popcnt,sse4")
      | 
shortcut.cpp: In function 'long long int calc(int, int)':
shortcut.cpp:43:5: warning: unused variable 're' [-Wunused-variable]
   43 |  ll re = 0;
      |     ^~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 360 KB n = 4, 80 is a correct answer
2 Correct 1 ms 356 KB n = 9, 110 is a correct answer
3 Correct 0 ms 360 KB n = 4, 21 is a correct answer
4 Correct 0 ms 360 KB n = 3, 4 is a correct answer
5 Correct 0 ms 360 KB n = 2, 62 is a correct answer
6 Correct 0 ms 360 KB n = 2, 3 is a correct answer
7 Correct 0 ms 360 KB n = 3, 29 is a correct answer
8 Correct 0 ms 360 KB n = 2, 3 is a correct answer
9 Correct 0 ms 352 KB n = 2, 3 is a correct answer
10 Correct 0 ms 356 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 352 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 356 KB n = 3, 3000000000 is a correct answer
13 Correct 0 ms 360 KB n = 3, 3000000000 is a correct answer
14 Correct 0 ms 348 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 348 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 444 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 400 KB n = 10, 1000000343 is a correct answer
18 Correct 0 ms 348 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 348 KB n = 10, 7000000000 is a correct answer
20 Correct 0 ms 348 KB n = 5, 12 is a correct answer
21 Correct 0 ms 348 KB n = 5, 25 is a correct answer
22 Correct 0 ms 348 KB n = 2, 122 is a correct answer
23 Correct 0 ms 348 KB n = 10, 117 is a correct answer
24 Correct 0 ms 348 KB n = 10, 336 is a correct answer
25 Correct 0 ms 348 KB n = 10, 438 is a correct answer
26 Correct 0 ms 348 KB n = 10, 206 is a correct answer
27 Correct 0 ms 348 KB n = 10, 636 is a correct answer
28 Correct 0 ms 348 KB n = 4, 2399 is a correct answer
29 Correct 0 ms 344 KB n = 10, 10992 is a correct answer
30 Correct 0 ms 348 KB n = 10, 3112 is a correct answer
31 Correct 7 ms 860 KB n = 100, 51000000001 is a correct answer
32 Correct 2 ms 604 KB n = 50, 197881272 is a correct answer
33 Runtime error 14 ms 1372 KB Execution killed with signal 6
34 Halted 0 ms 0 KB -