Submission #586849

# Submission time Handle Problem Language Result Execution time Memory
586849 2022-06-30T18:11:54 Z FatihSolak Wombats (IOI13_wombats) C++17
76 / 100
2513 ms 202960 KB
#include "wombats.h"
#include <bits/stdc++.h>
#define R 5005
#define C 205
using namespace std;
const int block = 40;
int r,c;
int h[R][C];
int w[R][C];
int opt[C][C];
struct node{
    int a[C][C];
    int l,r;
    node(int init){
        for(int i = 0;i<C;i++){
            for(int j = 0;j<C;j++){
                a[i][j] = init;
            }
        }
    }
}tmp(0);
node merge(node a,node b){
    for(int dif = -c-1;dif < c ;dif++){
        for(int i = max(0,-dif);i + dif<c;i++){
            int j = dif + i;
            int l = 0,r = c-1;
            if(j)
                l = opt[i][j-1];
            if(i + 1 != c)
                r = opt[i+1][j];
            tmp.a[i][j] = 1e9;
            for(int x = l;x<=r;x++){
                if(a.a[i][x] + b.a[x][j] < tmp.a[i][j]){
                    tmp.a[i][j] = a.a[i][x] + b.a[x][j];
                    opt[i][j] = x;
                }
            }
        }
    }
    return tmp;
}
struct SegTree{
    vector<node> t;
    int n;
    void init(int size){
        n = size;
        t.assign(4*n,1e9);
        build(1,0,n-1);
    }
    void build(int v,int tl,int tr){
        t[v].l = tl * block;
        t[v].r = min(r-1,(tr + 1) * block - 1);
        if(tl == tr){
            for(int i = 0;i<c;i++){
                t[v].a[i][i] = 0;
                for(int j = t[v].l;j<=t[v].r;j++){
                    for(int d=1;d<c;d++){
                        t[v].a[i][d] = min(t[v].a[i][d],t[v].a[i][d-1] + h[j][d-1]);
                    }
                    for(int d=c-2;d>=0;d--){
                        t[v].a[i][d] = min(t[v].a[i][d],t[v].a[i][d+1] + h[j][d]);
                    }
                    for(int d=0;d<c;d++){
                        t[v].a[i][d] = t[v].a[i][d] + w[j][d];
                    }
                }
            }
            return;
        }
        int tm = (tl + tr)/2;
        build(v*2,tl,tm);
        build(v*2+1,tm+1,tr);
        t[v] = merge(t[v*2],t[v*2+1]);
    }
    void upd(int v,int tl,int tr,int pos){
        t[v].l = tl * block;
        t[v].r = min(r-1,(tr + 1) * block - 1);
        if(tl == tr){
            for(int i = 0;i<c;i++){
                t[v].a[i][i] = 0;
                for(int j = t[v].l;j<=t[v].r;j++){
                    for(int d=1;d<c;d++){
                        t[v].a[i][d] = min(t[v].a[i][d],t[v].a[i][d-1] + h[j][d-1]);
                    }
                    for(int d=c-2;d>=0;d--){
                        t[v].a[i][d] = min(t[v].a[i][d],t[v].a[i][d+1] + h[j][d]);
                    }
                    for(int d=0;d<c;d++){
                        t[v].a[i][d] = t[v].a[i][d] + w[j][d];
                    }
                }
            }
            return;
        }
        int tm = (tl + tr)/2;
        if(pos <= tm)
            upd(v*2,tl,tm,pos);
        else upd(v*2+1,tm+1,tr,pos);
        t[v] = merge(t[v*2],t[v*2+1]);
    }

    void upd(int pos){
        upd(1,0,n-1,pos);
    }

}tree;

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++){
            h[i][j] = h_[i][j];
            w[i][j] = v_[i][j];
        }
    }
    tree.init((r+block-1) / block);
}

void changeH(int p, int q, int x) {
    h[p][q] = x;
    tree.upd(p/block);
}

void changeV(int p, int q, int x) {
    w[p][q] = x;
    if(p % block == 0 && p)
        tree.upd(p/block - 1);
    tree.upd(p/block);
}

int escape(int v1, int v2) {
    return tree.t[1].a[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]
   15 |  int res;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 134 ms 96084 KB Output is correct
2 Correct 142 ms 96012 KB Output is correct
3 Correct 203 ms 97740 KB Output is correct
4 Correct 175 ms 96204 KB Output is correct
5 Correct 157 ms 96076 KB Output is correct
6 Correct 1 ms 1236 KB Output is correct
7 Correct 1 ms 1236 KB Output is correct
8 Correct 1 ms 1236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1236 KB Output is correct
2 Correct 1 ms 1236 KB Output is correct
3 Correct 1 ms 1236 KB Output is correct
4 Correct 1 ms 1364 KB Output is correct
5 Correct 1 ms 1364 KB Output is correct
6 Correct 1 ms 1364 KB Output is correct
7 Correct 1 ms 1364 KB Output is correct
8 Correct 1 ms 1364 KB Output is correct
9 Correct 1 ms 1364 KB Output is correct
10 Correct 2 ms 1364 KB Output is correct
11 Correct 62 ms 2260 KB Output is correct
12 Correct 1 ms 1364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 235 ms 3588 KB Output is correct
2 Correct 340 ms 3540 KB Output is correct
3 Correct 314 ms 3540 KB Output is correct
4 Correct 322 ms 3540 KB Output is correct
5 Correct 340 ms 3540 KB Output is correct
6 Correct 1 ms 1236 KB Output is correct
7 Correct 1 ms 1236 KB Output is correct
8 Correct 1 ms 1236 KB Output is correct
9 Correct 1648 ms 3540 KB Output is correct
10 Correct 1 ms 1236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 151 ms 100044 KB Output is correct
2 Correct 161 ms 100044 KB Output is correct
3 Correct 152 ms 100040 KB Output is correct
4 Correct 179 ms 100836 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 236 ms 3588 KB Output is correct
2 Correct 339 ms 3540 KB Output is correct
3 Correct 309 ms 3540 KB Output is correct
4 Correct 316 ms 3540 KB Output is correct
5 Correct 342 ms 3540 KB Output is correct
6 Correct 141 ms 99960 KB Output is correct
7 Correct 160 ms 99996 KB Output is correct
8 Correct 173 ms 100044 KB Output is correct
9 Correct 188 ms 100812 KB Output is correct
10 Correct 148 ms 96052 KB Output is correct
11 Correct 138 ms 96140 KB Output is correct
12 Correct 214 ms 97768 KB Output is correct
13 Correct 167 ms 96136 KB Output is correct
14 Correct 141 ms 96120 KB Output is correct
15 Correct 1 ms 1236 KB Output is correct
16 Correct 1 ms 1236 KB Output is correct
17 Correct 1 ms 1236 KB Output is correct
18 Correct 1 ms 1364 KB Output is correct
19 Correct 1 ms 1364 KB Output is correct
20 Correct 1 ms 1364 KB Output is correct
21 Correct 1 ms 1364 KB Output is correct
22 Correct 1 ms 1364 KB Output is correct
23 Correct 1 ms 1364 KB Output is correct
24 Correct 1 ms 1364 KB Output is correct
25 Correct 63 ms 2308 KB Output is correct
26 Correct 2 ms 1364 KB Output is correct
27 Correct 1639 ms 3544 KB Output is correct
28 Correct 2449 ms 100852 KB Output is correct
29 Correct 2406 ms 83252 KB Output is correct
30 Correct 2366 ms 83220 KB Output is correct
31 Correct 2513 ms 101684 KB Output is correct
32 Correct 1 ms 1236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 238 ms 3596 KB Output is correct
2 Correct 348 ms 3548 KB Output is correct
3 Correct 313 ms 3532 KB Output is correct
4 Correct 317 ms 3612 KB Output is correct
5 Correct 340 ms 3540 KB Output is correct
6 Correct 137 ms 99940 KB Output is correct
7 Correct 141 ms 100052 KB Output is correct
8 Correct 168 ms 100028 KB Output is correct
9 Correct 186 ms 100828 KB Output is correct
10 Correct 136 ms 96076 KB Output is correct
11 Correct 137 ms 96132 KB Output is correct
12 Correct 206 ms 97804 KB Output is correct
13 Correct 152 ms 96076 KB Output is correct
14 Correct 141 ms 96120 KB Output is correct
15 Runtime error 665 ms 202960 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -