/*
ID: varunra2
LANG: C++
TASK: wombat
*/
#include <bits/stdc++.h>
#include "wombats.h"
using namespace std;
#ifdef DEBUG
#include "lib/debug.h"
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#define debug_arr(...) \
cerr << "[" << #__VA_ARGS__ << "]:", debug_arr(__VA_ARGS__)
#pragma GCC diagnostic ignored "-Wsign-compare"
//#pragma GCC diagnostic ignored "-Wunused-parameter"
//#pragma GCC diagnostic ignored "-Wunused-variable"
#else
#define debug(...) 42
#endif
#define EPS 1e-9
#define IN(A, B, C) assert(B <= A && A <= C)
#define INF (int)1e9
#define MEM(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define MP make_pair
#define PB push_back
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define x first
#define y second
const double PI = acos(-1.0);
typedef long long ll;
typedef long double ld;
typedef pair<int, int> PII;
typedef map<int, int> MPII;
typedef multiset<int> MSETI;
typedef set<int> SETI;
typedef set<string> SETS;
typedef vector<int> VI;
typedef vector<PII> VII;
typedef vector<VI> VVI;
typedef vector<string> VS;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define trav(a, x) for (auto& a : x)
#define sz(x) (int)(x).size()
typedef pair<int, int> pii;
typedef vector<int> vi;
#pragma GCC diagnostic ignored "-Wsign-compare"
// util functions
int n, m;
int siz;
bool sub1 = false;
bool sub23 = false;
bool sub4 = false;
int ret = 0;
int hsh(int i, int j) { return i * m + j; }
PII unhsh(int h) { return MP(h / m, h % m); }
VVI h(5000, VI(200));
VVI v(5000, VI(200));
int dp[2][2][5000];
vector<VII> adj;
void addEdge(int i, int j, int k, int l, int w, bool b = false) {
int u = hsh(i, j);
int v = hsh(k, l);
adj[u].PB(MP(v, w));
if (b) adj[v].PB(MP(u, w));
}
void genAdj() {
adj.resize(siz);
trav(x, adj) x.clear();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < m; j++) {
addEdge(i, j, i + 1, j, v[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m - 1; j++) {
addEdge(i, j, i, j + 1, h[i][j], true);
}
}
}
int calc(int ind) {
for (int i = 1; i < n; i++) {
dp[ind][0][i] = min(dp[ind][0][i - 1] + v[i - 1][0],
dp[ind][1][i - 1] + v[i - 1][1] + h[i][0]);
dp[ind][1][i] = min(dp[ind][1][i - 1] + v[i - 1][1],
dp[ind][0][i - 1] + v[i - 1][0] + h[i][0]);
}
}
void calcDP() {
dp[0][0][0] = 0;
dp[0][1][0] = INF;
dp[1][1][0] = 0;
dp[1][0][0] = INF;
calc(0);
calc(1);
}
int dijk(int src, int goal) {
VI dist(siz, 2 * INF);
dist[src] = 0;
priority_queue<PII, VII, greater<PII>> pq;
pq.push(MP(0, src));
vector<bool> vis(siz, false);
while (!pq.empty()) {
int u = pq.top().y;
int d = pq.top().x;
if (u == goal) return d;
pq.pop();
if (vis[u]) continue;
vis[u] = true;
for (auto& x : adj[u]) {
if (dist[u] + x.y < dist[x.x]) {
dist[x.x] = dist[u] + x.y;
pq.push(MP(dist[x.x], x.x));
}
}
}
return 2 * INF;
}
void init(int R, int C, int H[5000][200], int V[5000][200]) {
if (C == 1)
sub1 = true;
else if (C == 2)
sub4 = true;
else
sub23 = true;
n = R;
m = C;
siz = n * m;
for (int i = 0; i < 5000; i++) {
for (int j = 0; j < 200; j++) {
h[i][j] = H[i][j];
v[i][j] = V[i][j];
}
}
if (sub23) genAdj();
if (sub1)
for (int i = 0; i < 5000; i++) {
ret += v[i][0];
}
if (sub4) {
calcDP();
}
}
void changeV(int p, int q, int w) {
if (sub1) {
ret -= v[p][q];
ret += w;
}
v[p][q] = w;
if (sub23) genAdj();
if(sub4) calcDP();
}
void changeH(int p, int q, int w) {
if (sub1) {
ret -= h[p][q];
ret += w;
}
h[p][q] = w;
if (sub23) genAdj();
if(sub4) calcDP();
}
int escape(int a, int b) {
if (sub1) return ret;
if (sub23) return dijk(hsh(0, a), hsh(n - 1, b));
if (sub4) return dp[a][b][n - 1];
}
// int main() {
// #ifndef ONLINE_JUDGE
// freopen("wombat.in", "r", stdin);
// freopen("wombat.out", "w", stdout);
// #endif
// cin.sync_with_stdio(0);
// cin.tie(0);
// int r, c;
// int h[5000][200];
// int v[5000][200];
// cin >> r >> c;
// rep(i, 0, r) rep(j, 0, c - 1) cin >> h[i][j];
// rep(i, 0, r - 1) rep(j, 0, c) cin >> v[i][j];
// init(r, c, h, v);
// debug("done");
// int q;
// cin >> q;
// while (q--) {
// int type;
// cin >> type;
// if (type == 0) {
// int a, b;
// cin >> a >> b;
// cout << escape(a, b) << '\n';
// } else if (type == 1) {
// int p, q, w;
// cin >> p >> q >> w;
// changeV(p, q, w);
// } else {
// int p, q, w;
// cin >> p >> q >> w;
// changeH(p, q, w);
// }
// debug("done", type);
// }
// 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 'int calc(int)':
wombats.cpp:104:1: warning: no return statement in function returning non-void [-Wreturn-type]
104 | }
| ^
wombats.cpp: In function 'int escape(int, int)':
wombats.cpp:188:1: warning: control reaches end of non-void function [-Wreturn-type]
188 | }
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
12532 KB |
Output is correct |
2 |
Correct |
13 ms |
12544 KB |
Output is correct |
3 |
Correct |
98 ms |
14368 KB |
Output is correct |
4 |
Correct |
12 ms |
12544 KB |
Output is correct |
5 |
Correct |
12 ms |
12544 KB |
Output is correct |
6 |
Correct |
8 ms |
8576 KB |
Output is correct |
7 |
Correct |
8 ms |
8576 KB |
Output is correct |
8 |
Correct |
9 ms |
8576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
8576 KB |
Output is correct |
2 |
Correct |
8 ms |
8576 KB |
Output is correct |
3 |
Correct |
8 ms |
8576 KB |
Output is correct |
4 |
Correct |
25 ms |
8648 KB |
Output is correct |
5 |
Correct |
18 ms |
8576 KB |
Output is correct |
6 |
Correct |
19 ms |
8576 KB |
Output is correct |
7 |
Correct |
26 ms |
8576 KB |
Output is correct |
8 |
Correct |
22 ms |
8576 KB |
Output is correct |
9 |
Correct |
27 ms |
8676 KB |
Output is correct |
10 |
Correct |
25 ms |
8576 KB |
Output is correct |
11 |
Correct |
8467 ms |
9920 KB |
Output is correct |
12 |
Correct |
35 ms |
8684 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
192 ms |
9600 KB |
Output is correct |
2 |
Correct |
213 ms |
9904 KB |
Output is correct |
3 |
Correct |
198 ms |
9600 KB |
Output is correct |
4 |
Correct |
194 ms |
9600 KB |
Output is correct |
5 |
Correct |
199 ms |
9600 KB |
Output is correct |
6 |
Correct |
9 ms |
8608 KB |
Output is correct |
7 |
Correct |
9 ms |
8576 KB |
Output is correct |
8 |
Correct |
8 ms |
8576 KB |
Output is correct |
9 |
Correct |
402 ms |
9600 KB |
Output is correct |
10 |
Correct |
9 ms |
8576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
38 ms |
33044 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
197 ms |
9644 KB |
Output is correct |
2 |
Correct |
212 ms |
9724 KB |
Output is correct |
3 |
Correct |
197 ms |
9600 KB |
Output is correct |
4 |
Correct |
196 ms |
9600 KB |
Output is correct |
5 |
Correct |
195 ms |
9600 KB |
Output is correct |
6 |
Runtime error |
35 ms |
33144 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
7 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
192 ms |
9592 KB |
Output is correct |
2 |
Correct |
206 ms |
9720 KB |
Output is correct |
3 |
Correct |
193 ms |
9600 KB |
Output is correct |
4 |
Correct |
194 ms |
9600 KB |
Output is correct |
5 |
Correct |
191 ms |
9728 KB |
Output is correct |
6 |
Runtime error |
35 ms |
33144 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
7 |
Halted |
0 ms |
0 KB |
- |