/**
____ ____ ____ __________________ ____ ____ ____
||I || ||c || ||e || || || ||M || ||a || ||n ||
||__|| ||__|| ||__|| ||________________|| ||__|| ||__|| ||__||
|/__\| |/__\| |/__\| |/________________\| |/__\| |/__\| |/__\|
*/
//#include"wombats.h"
#include <set>
#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>
#include <cstdio>
#define maxn 5005
#define maxn2 205
#define maxlog 20
#define INF 1000000010
#define LINF 1000000000000000005
#define endl '\n'
#define pb(x) push_back(x)
#define X first
#define Y second
#define control cerr<<"passed"<<endl;
#pragma GCC optimize("O3" , "Ofast" , "unroll-loops" , "fast-math")
#pragma GCC target("avx2")
using namespace std;
/**std::chrono::high_resolution_clock::time_point startT, currT;
constexpr double TIME_MULT = 1;
double timePassed()
{
using namespace std::chrono;
currT = high_resolution_clock::now();
double time = duration_cast<duration<double>>(currT - startT).count();
return time * TIME_MULT;
}*/
typedef pair <long long, int> pli;
int d[maxn];
int c, r;
int h[maxn][maxn2];
int v[maxn][maxn2];
//int dp[maxn][maxn2];
/**void dijkstra(int node)
{
for(int i = 0; i < c; i++)
d[i] = 1e9;
d[node] = 0;
for(int j = 0; j < r; j++)
{
set <int> q;
for(int i = 0; i < c; i++)
if(d[i] != 1e9)
q.emplace(i);
while(q.size())
{
int e = *q.begin();
q.erase(q.begin());
if(e + 1 < c)
if(d[e + 1] > d[e] + h[j][e])
{
d[e + 1] = d[e] + h[j][e];
q.emplace(e + 1);
}
if(e >= 1)
if(d[e - 1] > d[e] + h[j][e - 1])
{
d[e - 1] = d[e] + h[j][e - 1];
q.emplace(e - 1);
}
}
if(j + 1 < r)
for(int i = 0; i < c; i++)
d[i] += v[j][i];
}
for(int i = 0; i < c; i++)
dp[node][i] = d[i];
}*/
int dp[5001][5001][201];
void calc_row(int i , int k)
{
for(int j = 1; j < c; j++)
dp[i][j][k] = min(dp[i][j][k] , dp[i][j][k - 1] + h[j][k - 1]);
for(int j = c - 2; j > -1; j--)
dp[i][j][k] = min(dp[i][j][k] , dp[i][j][k + 1] + h[j][k]);
}
void calc_dp(int k)
{
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
dp[k][j][i] = 1e9;
dp[k][k][0] = 0;
calc_row(k , 0);
for(int i = 1; i < r; i++)
{
for(int j = 0; j < c; j++)
dp[k][j][i] = dp[k][j][i - 1] + v[i - 1][j];
calc_row(k , i);
}
}
void init(int R, int C, int H[5000][200], int V[5000][200])
{
r = R;
c = C;
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
{
if(j + 1 < c)
h[i][j] = H[i][j];
if(i + 1 < r)
v[i][j] = V[i][j];
}
for(int i = 0; i < c; i++)
calc_dp(i);
}
void changeH(int P , int Q , int W)
{
h[P][Q] = W;
for(int i = 0; i < c; i++)
calc_dp(i);
}
void changeV(int P , int Q , int W)
{
v[P][Q] = W;
for(int i = 0; i < c; i++)
calc_dp(i);
}
int escape(int V1 , int V2)
{
return dp[V1][V2][r - 1];
}
/**int main()
{
#ifdef ONLINE_JUDGE /// promeni
freopen("input.in", "r", stdin);
freopen("taxi.out", "w", stdout);
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
//startT = std::chrono::high_resolution_clock::now();
return 0;
}*/
Compilation message
grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
15 | int res;
| ^~~
wombats.cpp: In function 'void calc_row(int, int)':
wombats.cpp:103:55: warning: array subscript -1 is below array bounds of 'int [201]' [-Warray-bounds]
103 | dp[i][j][k] = min(dp[i][j][k] , dp[i][j][k - 1] + h[j][k - 1]);
| ~~~~~~~~~~~~~~^
wombats.cpp:103:69: warning: array subscript -1 is below array bounds of 'int [205]' [-Warray-bounds]
103 | dp[i][j][k] = min(dp[i][j][k] , dp[i][j][k - 1] + h[j][k - 1]);
| ~~~~~~~~~~^
/usr/bin/ld: failed to convert GOTPCREL relocation; relink with --no-relax
collect2: error: ld returned 1 exit status