Submission #306220

# Submission time Handle Problem Language Result Execution time Memory
306220 2020-09-24T22:39:07 Z Lawliet Mountains (IOI17_mountains) C++17
70 / 100
4 ms 1808 KB
#include "mountains.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long int lli;

const int MAXN = 310;

struct point
{
	lli x, y;

	point(lli x = 0, lli y = 0)
		: x(x), y(y) {}

	lli operator * (point a) { return x*a.y - y*a.x; }
	point operator - (point a) { return point( x - a.x , y - a.y ); }
};

int n;

int v[MAXN];
int dp[MAXN][MAXN];

int solve(int L, int R)
{
	int& ans = dp[L][R];

	if( ans != -1 ) return ans;

	if( L > R ) return ans = 0;
	if( L == R ) return ans = 1;

	ans = 1;
	vector<point> cHull( 1 , point( L , v[L] ) );

	int last = L + 1;
	
	for(int i = L + 1 ; i <= R ; i++)
	{
		point cur( i , v[i] );

		while( (int)cHull.size() > 1 )
		{
			point A = cHull[ (int)cHull.size() - 1 ];
			point origin = cHull[ (int)cHull.size() - 2 ];

			if( (cur - origin)*(A - origin) > 0 ) break;

			cHull.pop_back();
		}

		if( (int)cHull.size() == 1 )
		{
			ans += solve( last , i - 1 );
			last = i + 1;
		}

		cHull.push_back( cur );
	}

	ans += solve( last , R );
	ans = max( ans , solve( L + 1 , R ) );

	return ans;
}

int maximum_deevs(vector<int> y) 
{
	n = (int)y.size();

	for(int i = 1 ; i <= n ; i++)
		v[i] = y[i - 1];

	memset( dp , -1 , sizeof(dp) );

	return solve( 1 , n );
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 640 KB Output is correct
2 Correct 1 ms 640 KB Output is correct
3 Correct 1 ms 768 KB Output is correct
4 Correct 1 ms 768 KB Output is correct
5 Correct 1 ms 640 KB Output is correct
6 Correct 1 ms 640 KB Output is correct
7 Correct 1 ms 640 KB Output is correct
8 Correct 1 ms 640 KB Output is correct
9 Correct 1 ms 640 KB Output is correct
10 Correct 1 ms 640 KB Output is correct
11 Correct 1 ms 640 KB Output is correct
12 Correct 1 ms 640 KB Output is correct
13 Correct 1 ms 640 KB Output is correct
14 Correct 1 ms 640 KB Output is correct
15 Correct 1 ms 640 KB Output is correct
16 Correct 1 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 640 KB Output is correct
2 Correct 1 ms 640 KB Output is correct
3 Correct 1 ms 768 KB Output is correct
4 Correct 1 ms 768 KB Output is correct
5 Correct 1 ms 640 KB Output is correct
6 Correct 1 ms 640 KB Output is correct
7 Correct 1 ms 640 KB Output is correct
8 Correct 1 ms 640 KB Output is correct
9 Correct 1 ms 640 KB Output is correct
10 Correct 1 ms 640 KB Output is correct
11 Correct 1 ms 640 KB Output is correct
12 Correct 1 ms 640 KB Output is correct
13 Correct 1 ms 640 KB Output is correct
14 Correct 1 ms 640 KB Output is correct
15 Correct 1 ms 640 KB Output is correct
16 Correct 1 ms 640 KB Output is correct
17 Correct 1 ms 640 KB Output is correct
18 Correct 1 ms 640 KB Output is correct
19 Correct 1 ms 640 KB Output is correct
20 Correct 1 ms 640 KB Output is correct
21 Correct 1 ms 640 KB Output is correct
22 Correct 1 ms 640 KB Output is correct
23 Correct 1 ms 768 KB Output is correct
24 Correct 1 ms 640 KB Output is correct
25 Correct 1 ms 640 KB Output is correct
26 Correct 1 ms 640 KB Output is correct
27 Correct 1 ms 640 KB Output is correct
28 Correct 1 ms 640 KB Output is correct
29 Correct 1 ms 640 KB Output is correct
30 Correct 1 ms 640 KB Output is correct
31 Correct 1 ms 640 KB Output is correct
32 Correct 1 ms 640 KB Output is correct
33 Correct 1 ms 640 KB Output is correct
34 Correct 1 ms 640 KB Output is correct
35 Correct 1 ms 640 KB Output is correct
36 Correct 1 ms 640 KB Output is correct
37 Correct 1 ms 896 KB Output is correct
38 Correct 1 ms 768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 640 KB Output is correct
2 Correct 1 ms 640 KB Output is correct
3 Correct 1 ms 768 KB Output is correct
4 Correct 1 ms 768 KB Output is correct
5 Correct 1 ms 640 KB Output is correct
6 Correct 1 ms 640 KB Output is correct
7 Correct 1 ms 640 KB Output is correct
8 Correct 1 ms 640 KB Output is correct
9 Correct 1 ms 640 KB Output is correct
10 Correct 1 ms 640 KB Output is correct
11 Correct 1 ms 640 KB Output is correct
12 Correct 1 ms 640 KB Output is correct
13 Correct 1 ms 640 KB Output is correct
14 Correct 1 ms 640 KB Output is correct
15 Correct 1 ms 640 KB Output is correct
16 Correct 1 ms 640 KB Output is correct
17 Correct 1 ms 640 KB Output is correct
18 Correct 1 ms 640 KB Output is correct
19 Correct 1 ms 640 KB Output is correct
20 Correct 1 ms 640 KB Output is correct
21 Correct 1 ms 640 KB Output is correct
22 Correct 1 ms 640 KB Output is correct
23 Correct 1 ms 768 KB Output is correct
24 Correct 1 ms 640 KB Output is correct
25 Correct 1 ms 640 KB Output is correct
26 Correct 1 ms 640 KB Output is correct
27 Correct 1 ms 640 KB Output is correct
28 Correct 1 ms 640 KB Output is correct
29 Correct 1 ms 640 KB Output is correct
30 Correct 1 ms 640 KB Output is correct
31 Correct 1 ms 640 KB Output is correct
32 Correct 1 ms 640 KB Output is correct
33 Correct 1 ms 640 KB Output is correct
34 Correct 1 ms 640 KB Output is correct
35 Correct 1 ms 640 KB Output is correct
36 Correct 1 ms 640 KB Output is correct
37 Correct 1 ms 896 KB Output is correct
38 Correct 1 ms 768 KB Output is correct
39 Correct 1 ms 640 KB Output is correct
40 Correct 2 ms 768 KB Output is correct
41 Correct 2 ms 768 KB Output is correct
42 Correct 2 ms 768 KB Output is correct
43 Correct 2 ms 768 KB Output is correct
44 Correct 2 ms 768 KB Output is correct
45 Correct 4 ms 768 KB Output is correct
46 Correct 4 ms 768 KB Output is correct
47 Correct 4 ms 768 KB Output is correct
48 Correct 4 ms 768 KB Output is correct
49 Correct 4 ms 768 KB Output is correct
50 Correct 4 ms 768 KB Output is correct
51 Correct 2 ms 640 KB Output is correct
52 Correct 2 ms 768 KB Output is correct
53 Correct 2 ms 768 KB Output is correct
54 Correct 2 ms 768 KB Output is correct
55 Correct 2 ms 768 KB Output is correct
56 Correct 2 ms 768 KB Output is correct
57 Correct 2 ms 1280 KB Output is correct
58 Correct 2 ms 672 KB Output is correct
59 Correct 2 ms 768 KB Output is correct
60 Correct 3 ms 1808 KB Output is correct
61 Correct 3 ms 1712 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 640 KB Output is correct
2 Correct 1 ms 640 KB Output is correct
3 Correct 1 ms 768 KB Output is correct
4 Correct 1 ms 768 KB Output is correct
5 Correct 1 ms 640 KB Output is correct
6 Correct 1 ms 640 KB Output is correct
7 Correct 1 ms 640 KB Output is correct
8 Correct 1 ms 640 KB Output is correct
9 Correct 1 ms 640 KB Output is correct
10 Correct 1 ms 640 KB Output is correct
11 Correct 1 ms 640 KB Output is correct
12 Correct 1 ms 640 KB Output is correct
13 Correct 1 ms 640 KB Output is correct
14 Correct 1 ms 640 KB Output is correct
15 Correct 1 ms 640 KB Output is correct
16 Correct 1 ms 640 KB Output is correct
17 Correct 1 ms 640 KB Output is correct
18 Correct 1 ms 640 KB Output is correct
19 Correct 1 ms 640 KB Output is correct
20 Correct 1 ms 640 KB Output is correct
21 Correct 1 ms 640 KB Output is correct
22 Correct 1 ms 640 KB Output is correct
23 Correct 1 ms 768 KB Output is correct
24 Correct 1 ms 640 KB Output is correct
25 Correct 1 ms 640 KB Output is correct
26 Correct 1 ms 640 KB Output is correct
27 Correct 1 ms 640 KB Output is correct
28 Correct 1 ms 640 KB Output is correct
29 Correct 1 ms 640 KB Output is correct
30 Correct 1 ms 640 KB Output is correct
31 Correct 1 ms 640 KB Output is correct
32 Correct 1 ms 640 KB Output is correct
33 Correct 1 ms 640 KB Output is correct
34 Correct 1 ms 640 KB Output is correct
35 Correct 1 ms 640 KB Output is correct
36 Correct 1 ms 640 KB Output is correct
37 Correct 1 ms 896 KB Output is correct
38 Correct 1 ms 768 KB Output is correct
39 Correct 1 ms 640 KB Output is correct
40 Correct 2 ms 768 KB Output is correct
41 Correct 2 ms 768 KB Output is correct
42 Correct 2 ms 768 KB Output is correct
43 Correct 2 ms 768 KB Output is correct
44 Correct 2 ms 768 KB Output is correct
45 Correct 4 ms 768 KB Output is correct
46 Correct 4 ms 768 KB Output is correct
47 Correct 4 ms 768 KB Output is correct
48 Correct 4 ms 768 KB Output is correct
49 Correct 4 ms 768 KB Output is correct
50 Correct 4 ms 768 KB Output is correct
51 Correct 2 ms 640 KB Output is correct
52 Correct 2 ms 768 KB Output is correct
53 Correct 2 ms 768 KB Output is correct
54 Correct 2 ms 768 KB Output is correct
55 Correct 2 ms 768 KB Output is correct
56 Correct 2 ms 768 KB Output is correct
57 Correct 2 ms 1280 KB Output is correct
58 Correct 2 ms 672 KB Output is correct
59 Correct 2 ms 768 KB Output is correct
60 Correct 3 ms 1808 KB Output is correct
61 Correct 3 ms 1712 KB Output is correct
62 Runtime error 3 ms 1280 KB Execution killed with signal 11 (could be triggered by violating memory limits)
63 Halted 0 ms 0 KB -