Submission #753982

# Submission time Handle Problem Language Result Execution time Memory
753982 2023-06-06T12:25:42 Z marvinthang Wombats (IOI13_wombats) C++17
55 / 100
884 ms 262144 KB
/*************************************
*    author: marvinthang             *
*    created: 06.06.2023 17:13:07    *
*************************************/

#include "wombats.h"
#include <bits/stdc++.h>

using namespace std;

#define                  fi  first
#define                  se  second
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define              ALL(v)  (v).begin(), (v).end()
#define           REP(i, n)  for (int i = 0, _n = (n); i < _n; ++i)
#define          REPD(i, n)  for (int i = (n); i--; )
#define        FOR(i, a, b)  for (int i = (a), _b = (b); i < _b; ++i) 
#define       FORD(i, b, a)  for (int i = (b), _a = (a); --i >= _a; ) 
#define       FORE(i, a, b)  for (int i = (a), _b = (b); i <= _b; ++i) 
#define      FORDE(i, b, a)  for (int i = (b), _a = (a); i >= _a; --i) 
#define        scan_op(...)  istream & operator >> (istream &in, __VA_ARGS__ &u)
#define       print_op(...)  ostream & operator << (ostream &out, const __VA_ARGS__ &u)
#ifdef LOCAL
    #include "debug.h"
#else
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    #define DB(...) 23
    #define db(...) 23
    #define debug(...) 23
#endif

template <class U, class V> scan_op(pair <U, V>)  { return in >> u.first >> u.second; }
template <class T> scan_op(vector <T>)  { for (size_t i = 0; i < u.size(); ++i) in >> u[i]; return in; }
template <class U, class V> print_op(pair <U, V>)  { return out << '(' << u.first << ", " << u.second << ')'; }
template <size_t i, class T> ostream & print_tuple_utils(ostream &out, const T &tup) { if constexpr(i == tuple_size<T>::value) return out << ")";  else return print_tuple_utils<i + 1, T>(out << (i ? ", " : "(") << get<i>(tup), tup); }
template <class ...U> print_op(tuple<U...>) { return print_tuple_utils<0, tuple<U...>>(out, u); }
template <class Con, class = decltype(begin(declval<Con>()))> typename enable_if <!is_same<Con, string>::value, ostream&>::type operator << (ostream &out, const Con &con) { out << '{'; for (__typeof(con.begin()) it = con.begin(); it != con.end(); ++it) out << (it == con.begin() ? "" : ", ") << *it; return out << '}'; }
template <class A, class B> bool minimize(A &a, B b)  { if (a > b) { a = b; return true; } return false; }
template <class A, class B> bool maximize(A &a, B b)  { if (a < b) { a = b; return true; } return false; }

// end of template

const int MAX_R = 5005;
const int MAX_C = 103;

int R, C, H[MAX_R][MAX_C], V[MAX_R][MAX_C];
int st[MAX_R << 2][MAX_C][MAX_C], opt[MAX_C][MAX_C];

void solve(int id, int r) {
    REP(x, C) {
        FOR(y, x + 1, C) st[id][x][y] = st[id][x][y - 1] + H[r][y - 1];
        REPD(y, x) st[id][x][y] = st[id][x][y + 1] + H[r][y];
    }
}

void pushUp(int id, int r) {
    REP(x, C) {
        memset(st[id][x], 0x3f, C * sizeof(int));
        REPD(y, C) FORE(k, x ? opt[x - 1][y] : 0, y + 1 < C ? opt[x][y + 1] : C - 1) if (minimize(st[id][x][y], st[id << 1][x][k] + V[r][k] + st[id << 1 | 1][k][y])) opt[x][y] = k;
    }
}

void build(int i, int l, int r) {
    if (r - l == 1) {
        solve(i, l);
        return;
    }
    int m = l + r >> 1;
    build(i << 1, l, m);
    build(i << 1 | 1, m, r);
    pushUp(i, m - 1);
}

void update(int i, int l, int r, int p) {
    if (r - l == 1) {
        solve(i, l);
        return;
    }
    int m = l + r >> 1;
    if (p < m) update(i << 1, l, m, p);
    else update(i << 1 | 1, m, r, p);
    pushUp(i, m - 1);
}

void init(int r, int c, int h[5000][200], int v[5000][200]) {
    R = r; C = c;
    REP(i, R) REP(j, C - 1) H[i][j] = h[i][j];
    REP(i, R - 1) REP(j, C) V[i][j] = v[i][j];
    build(1, 0, R);
}

void changeH(int P, int Q, int W) {
    H[P][Q] = W;
    update(1, 0, R, P);
}

void changeV(int P, int Q, int W) {
    V[P][Q] = W;
    update(1, 0, R, P);
}

int escape(int V1, int V2) {
    return st[1][V1][V2];
}

#ifdef LOCAL
#include <stdio.h>
#include <stdlib.h>
#include "wombats.h"

#define fail(s, x...) do { \
        fprintf(stderr, s "\n", ## x); \
        exit(1); \
    } while(0)

static int h[5000][200];
static int v[5000][200];

int main() {
    int R, C, E, P, Q, W, V1, V2, event, i, j;
    int res;

    FILE *f = fopen("wombats.in", "r");
    freopen("wombats.out", "w", stdout);
    if (!f)
        fail("Failed to open input file.");


    res = fscanf(f, "%d%d", &R, &C);
    for (i = 0; i < R; ++i)
        for (j = 0; j < C-1; ++j)
            res = fscanf(f, "%d", &h[i][j]);
    for (i = 0; i < R-1; ++i)
        for (j = 0; j < C; ++j)
            res = fscanf(f, "%d", &v[i][j]);
    init(R, C, h, v);

    res = fscanf(f, "%d", &E);

    for (i = 0; i < E; i++) {
        res = fscanf(f, "%d", &event);
        if (event == 1) {
            res = fscanf(f, "%d%d%d", &P, &Q, &W);
            changeH(P, Q, W);
        } else if (event == 2) {
            res = fscanf(f, "%d%d%d", &P, &Q, &W);
            changeV(P, Q, W);
        } else if (event == 3) {
            res = fscanf(f, "%d%d", &V1, &V2);
            printf("%d\n", escape(V1, V2));
        } else
            fail("Invalid event type.");
    }
    cerr << "end\n";
    fclose(f);
    return 0;
}
#endif

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 build(int, int, int)':
wombats.cpp:73:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   73 |     int m = l + r >> 1;
      |             ~~^~~
wombats.cpp: In function 'void update(int, int, int, int)':
wombats.cpp:84:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   84 |     int m = l + r >> 1;
      |             ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 15 ms 27504 KB Output is correct
2 Correct 16 ms 27472 KB Output is correct
3 Correct 87 ms 29152 KB Output is correct
4 Correct 19 ms 27492 KB Output is correct
5 Correct 14 ms 27476 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 280 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 852 KB Output is correct
5 Correct 1 ms 852 KB Output is correct
6 Correct 2 ms 852 KB Output is correct
7 Correct 1 ms 852 KB Output is correct
8 Correct 1 ms 724 KB Output is correct
9 Correct 1 ms 724 KB Output is correct
10 Correct 1 ms 724 KB Output is correct
11 Correct 64 ms 1732 KB Output is correct
12 Correct 1 ms 852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 53 ms 8876 KB Output is correct
2 Correct 36 ms 8852 KB Output is correct
3 Correct 49 ms 8956 KB Output is correct
4 Correct 52 ms 8940 KB Output is correct
5 Correct 51 ms 8936 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 139 ms 8944 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 57456 KB Output is correct
2 Correct 27 ms 57456 KB Output is correct
3 Correct 27 ms 57504 KB Output is correct
4 Correct 58 ms 58264 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 49 ms 8880 KB Output is correct
2 Correct 36 ms 8772 KB Output is correct
3 Correct 55 ms 8916 KB Output is correct
4 Correct 50 ms 8948 KB Output is correct
5 Correct 49 ms 8908 KB Output is correct
6 Correct 27 ms 57560 KB Output is correct
7 Correct 27 ms 57556 KB Output is correct
8 Correct 31 ms 57492 KB Output is correct
9 Correct 67 ms 58268 KB Output is correct
10 Correct 16 ms 27480 KB Output is correct
11 Correct 16 ms 27548 KB Output is correct
12 Correct 78 ms 29048 KB Output is correct
13 Correct 14 ms 27492 KB Output is correct
14 Correct 15 ms 27472 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 1 ms 852 KB Output is correct
19 Correct 1 ms 852 KB Output is correct
20 Correct 1 ms 852 KB Output is correct
21 Correct 1 ms 852 KB Output is correct
22 Correct 1 ms 724 KB Output is correct
23 Correct 2 ms 724 KB Output is correct
24 Correct 1 ms 724 KB Output is correct
25 Correct 76 ms 1768 KB Output is correct
26 Correct 1 ms 852 KB Output is correct
27 Correct 135 ms 8948 KB Output is correct
28 Runtime error 338 ms 262144 KB Execution killed with signal 9
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 49 ms 8876 KB Output is correct
2 Correct 38 ms 8868 KB Output is correct
3 Correct 64 ms 8948 KB Output is correct
4 Correct 65 ms 8940 KB Output is correct
5 Correct 49 ms 8916 KB Output is correct
6 Correct 29 ms 57556 KB Output is correct
7 Correct 28 ms 57548 KB Output is correct
8 Correct 28 ms 57524 KB Output is correct
9 Correct 60 ms 58344 KB Output is correct
10 Correct 15 ms 27476 KB Output is correct
11 Correct 19 ms 27496 KB Output is correct
12 Correct 83 ms 29128 KB Output is correct
13 Correct 18 ms 27488 KB Output is correct
14 Correct 17 ms 27564 KB Output is correct
15 Runtime error 884 ms 262144 KB Execution killed with signal 9
16 Halted 0 ms 0 KB -