#include "wombats.h"
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pb push_back
typedef pair<int, int> ii;
typedef long long ll;
int n, m;
const int maxn = 5005;
const int maxm = 205;
int H[maxn][maxm], V[maxn][maxm];
struct node
{
vector< vector<int> > dist;
node(){}
node(bool create)
{
if(create)
{
dist.assign(m, vector<int>(m, 1e9));
for(int i = 0; i< m; i++) dist[i][i] = 0;
}
}
};
node st[4*maxn];
const int ub = 10;
priority_queue< pair<int, ii> > pq;
vector< vector<int> > tod;
void dijk(int s, int r1, int r2, vector<int> &dist)
{
tod.assign(r2-r1+1, vector<int>(m, 1e9));
tod[0][s] = 0;
pq.push(make_pair(0, ii(r1, s)));
while(!pq.empty())
{
auto f = pq.top(); pq.pop();
int d = -f.X, x = f.Y.X, y = f.Y.Y;
if(d> tod[x-r1][y]) continue;
if(y && H[x][y-1]+d< tod[x-r1][y-1])
{
tod[x-r1][y-1] = H[x][y-1]+d;
pq.push(make_pair(-tod[x-r1][y-1], ii(x, y-1)));
}
if(y+1< m && H[x][y]+d< tod[x-r1][y+1])
{
tod[x-r1][y+1] = H[x][y]+d;
pq.push(make_pair(-tod[x-r1][y+1], ii(x, y+1)));
}
if(x+1<= r2 && V[x][y]+d< tod[x+1-r1][y])
{
tod[x+1-r1][y] = V[x][y]+d;
pq.push(make_pair(-tod[x+1-r1][y], ii(x+1, y)));
}
}
dist = tod.back();
}
vector< vector<int> > opt;
void merge(vector< vector<int> > &dist, vector< vector<int> > &d1, vector< vector<int> > &d2)
{
// printf("begun merging\n");
opt.assign(m, vector<int>(m, 0));
for(int diff = -m+1; diff<= m-1; diff++)
{
for(int i = 0; i< m; i++)
{
int j = i+diff;
if(j< 0 || j>= m) continue;
// printf("begun %d %d\n", i, j);
dist[i][j] = 1e9;
if(diff == -m+1)
{
for(int k = 0; k< m; k++)
{
if(d1[i][k]+d2[k][j]< dist[i][j])
{
dist[i][j] = d1[i][k] + d2[k][j];
opt[i][j] = k;
}
}
}
else
{
for(int k = max(0, j?opt[i][j-1]:0); k<= min(m-1, i+1< m?opt[i+1][j]:m-1); k++)
{
//printf("k = %d\n", k);
if(d1[i][k]+d2[k][j]< dist[i][j])
{
dist[i][j] = d1[i][k] + d2[k][j];
opt[i][j] = k;
}
}
}
}
}
// printf("finished merging\n");
}
void build(int p = 1, int L = 0, int R = n-1)
{
// printf("%d %d %d\n", p, L, R);
st[p] = node(true);
if(R-L+1<= ub)
{
for(int i = 0; i< m; i++)
{
dijk(i, L, R, st[p].dist[i]);
}
// printf("finished creating\n");
return;
}
build(p<<1, L, (L+R)>>1);
build((p<<1)+1, (L+R)>>1, R);
merge(st[p].dist, st[p<<1].dist, st[(p<<1)+1].dist);
}
void update(int x, int p = 1, int L = 0, int R = n-1)
{
if(R-L+1<= ub)
{
for(int i = 0; i< m; i++)
{
dijk(i, L, R, st[p].dist[i]);
}
return;
}
int M = (L+R)>>1;
if(x<= M) update(x, p<<1, L, M);
if(M<= x) update(x, (p<<1)+1, M, R);
merge(st[p].dist, st[p<<1].dist, st[(p<<1)+1].dist);
}
void init(int R, int C, int h[5000][200], int v[5000][200])
{
n = R, m = C;
for(int i = 0; i< n; i++)
{
for(int j = 0; j+1< m; j++)
{
H[i][j] = h[i][j];
}
}
for(int i = 0; i+1< n; i++)
{
for(int j = 0; j< m; j++)
{
V[i][j] = v[i][j];
}
}
//printf("started initing\n");
build();
}
void changeH(int P, int Q, int W)
{
//printf("changingH\n");
H[P][Q] = W;
update(P);
}
void changeV(int P, int Q, int W)
{
//printf("changingV\n");
V[P][Q] = W;
update(P);
}
int escape(int V1, int V2)
{
return st[1].dist[V1][V2];
}
Compilation message
grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
int res;
^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
8824 KB |
Output is correct |
2 |
Correct |
13 ms |
8936 KB |
Output is correct |
3 |
Correct |
87 ms |
11836 KB |
Output is correct |
4 |
Correct |
14 ms |
11836 KB |
Output is correct |
5 |
Correct |
11 ms |
11836 KB |
Output is correct |
6 |
Correct |
3 ms |
11836 KB |
Output is correct |
7 |
Correct |
3 ms |
11836 KB |
Output is correct |
8 |
Correct |
3 ms |
11836 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
11836 KB |
Output is correct |
2 |
Correct |
2 ms |
11836 KB |
Output is correct |
3 |
Correct |
3 ms |
11836 KB |
Output is correct |
4 |
Correct |
5 ms |
11836 KB |
Output is correct |
5 |
Correct |
4 ms |
11836 KB |
Output is correct |
6 |
Correct |
5 ms |
11836 KB |
Output is correct |
7 |
Correct |
6 ms |
11836 KB |
Output is correct |
8 |
Correct |
5 ms |
11836 KB |
Output is correct |
9 |
Correct |
6 ms |
11836 KB |
Output is correct |
10 |
Correct |
4 ms |
11836 KB |
Output is correct |
11 |
Correct |
98 ms |
11836 KB |
Output is correct |
12 |
Correct |
5 ms |
11836 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1014 ms |
11836 KB |
Output is correct |
2 |
Correct |
1801 ms |
11836 KB |
Output is correct |
3 |
Correct |
936 ms |
11836 KB |
Output is correct |
4 |
Correct |
899 ms |
11836 KB |
Output is correct |
5 |
Correct |
905 ms |
11836 KB |
Output is correct |
6 |
Correct |
3 ms |
11836 KB |
Output is correct |
7 |
Correct |
3 ms |
11836 KB |
Output is correct |
8 |
Correct |
3 ms |
11836 KB |
Output is correct |
9 |
Correct |
8495 ms |
11836 KB |
Output is correct |
10 |
Correct |
3 ms |
11836 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
18540 KB |
Output is correct |
2 |
Correct |
25 ms |
18556 KB |
Output is correct |
3 |
Correct |
27 ms |
18556 KB |
Output is correct |
4 |
Correct |
67 ms |
19380 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
876 ms |
19380 KB |
Output is correct |
2 |
Correct |
1791 ms |
19380 KB |
Output is correct |
3 |
Correct |
967 ms |
19380 KB |
Output is correct |
4 |
Correct |
924 ms |
19380 KB |
Output is correct |
5 |
Correct |
942 ms |
19380 KB |
Output is correct |
6 |
Correct |
22 ms |
19380 KB |
Output is correct |
7 |
Correct |
23 ms |
19380 KB |
Output is correct |
8 |
Correct |
26 ms |
19380 KB |
Output is correct |
9 |
Correct |
63 ms |
19380 KB |
Output is correct |
10 |
Correct |
11 ms |
19380 KB |
Output is correct |
11 |
Correct |
13 ms |
19380 KB |
Output is correct |
12 |
Correct |
91 ms |
19380 KB |
Output is correct |
13 |
Correct |
13 ms |
19380 KB |
Output is correct |
14 |
Correct |
12 ms |
19380 KB |
Output is correct |
15 |
Correct |
2 ms |
19380 KB |
Output is correct |
16 |
Correct |
2 ms |
19380 KB |
Output is correct |
17 |
Correct |
4 ms |
19380 KB |
Output is correct |
18 |
Correct |
5 ms |
19380 KB |
Output is correct |
19 |
Correct |
3 ms |
19380 KB |
Output is correct |
20 |
Correct |
5 ms |
19380 KB |
Output is correct |
21 |
Correct |
6 ms |
19380 KB |
Output is correct |
22 |
Correct |
4 ms |
19380 KB |
Output is correct |
23 |
Correct |
4 ms |
19380 KB |
Output is correct |
24 |
Correct |
4 ms |
19380 KB |
Output is correct |
25 |
Correct |
86 ms |
19380 KB |
Output is correct |
26 |
Correct |
4 ms |
19380 KB |
Output is correct |
27 |
Correct |
7989 ms |
19380 KB |
Output is correct |
28 |
Correct |
18659 ms |
96752 KB |
Output is correct |
29 |
Correct |
11316 ms |
96752 KB |
Output is correct |
30 |
Correct |
9805 ms |
96752 KB |
Output is correct |
31 |
Execution timed out |
20060 ms |
108172 KB |
Time limit exceeded |
32 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
908 ms |
108172 KB |
Output is correct |
2 |
Correct |
1706 ms |
108172 KB |
Output is correct |
3 |
Correct |
938 ms |
108172 KB |
Output is correct |
4 |
Correct |
960 ms |
108172 KB |
Output is correct |
5 |
Correct |
972 ms |
108172 KB |
Output is correct |
6 |
Correct |
23 ms |
108172 KB |
Output is correct |
7 |
Correct |
25 ms |
108172 KB |
Output is correct |
8 |
Correct |
27 ms |
108172 KB |
Output is correct |
9 |
Correct |
60 ms |
108172 KB |
Output is correct |
10 |
Correct |
10 ms |
108172 KB |
Output is correct |
11 |
Correct |
11 ms |
108172 KB |
Output is correct |
12 |
Correct |
91 ms |
108172 KB |
Output is correct |
13 |
Correct |
11 ms |
108172 KB |
Output is correct |
14 |
Correct |
13 ms |
108172 KB |
Output is correct |
15 |
Runtime error |
13602 ms |
263168 KB |
Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience. |
16 |
Halted |
0 ms |
0 KB |
- |