Submission #586851

# Submission time Handle Problem Language Result Execution time Memory
586851 2022-06-30T18:14:53 Z FatihSolak Wombats (IOI13_wombats) C++17
76 / 100
2662 ms 204576 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 + 5,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){
        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 147 ms 96884 KB Output is correct
2 Correct 142 ms 96924 KB Output is correct
3 Correct 210 ms 98472 KB Output is correct
4 Correct 183 ms 96836 KB Output is correct
5 Correct 139 ms 96912 KB Output is correct
6 Correct 1 ms 2132 KB Output is correct
7 Correct 1 ms 2132 KB Output is correct
8 Correct 1 ms 2124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2132 KB Output is correct
2 Correct 1 ms 2132 KB Output is correct
3 Correct 1 ms 2132 KB Output is correct
4 Correct 2 ms 2132 KB Output is correct
5 Correct 1 ms 2132 KB Output is correct
6 Correct 1 ms 2132 KB Output is correct
7 Correct 2 ms 2132 KB Output is correct
8 Correct 1 ms 2132 KB Output is correct
9 Correct 1 ms 2132 KB Output is correct
10 Correct 1 ms 2132 KB Output is correct
11 Correct 69 ms 3108 KB Output is correct
12 Correct 1 ms 2132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 252 ms 4416 KB Output is correct
2 Correct 344 ms 4364 KB Output is correct
3 Correct 336 ms 4436 KB Output is correct
4 Correct 321 ms 4564 KB Output is correct
5 Correct 348 ms 4436 KB Output is correct
6 Correct 1 ms 2132 KB Output is correct
7 Correct 1 ms 2132 KB Output is correct
8 Correct 1 ms 2132 KB Output is correct
9 Correct 1703 ms 4356 KB Output is correct
10 Correct 2 ms 2132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 153 ms 100876 KB Output is correct
2 Correct 157 ms 100888 KB Output is correct
3 Correct 173 ms 100868 KB Output is correct
4 Correct 172 ms 101608 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 235 ms 4308 KB Output is correct
2 Correct 327 ms 4308 KB Output is correct
3 Correct 337 ms 4356 KB Output is correct
4 Correct 324 ms 4436 KB Output is correct
5 Correct 379 ms 4308 KB Output is correct
6 Correct 162 ms 100840 KB Output is correct
7 Correct 178 ms 100876 KB Output is correct
8 Correct 182 ms 100868 KB Output is correct
9 Correct 179 ms 101656 KB Output is correct
10 Correct 155 ms 96932 KB Output is correct
11 Correct 154 ms 96908 KB Output is correct
12 Correct 207 ms 98500 KB Output is correct
13 Correct 160 ms 96844 KB Output is correct
14 Correct 166 ms 96828 KB Output is correct
15 Correct 1 ms 2132 KB Output is correct
16 Correct 1 ms 2132 KB Output is correct
17 Correct 1 ms 2132 KB Output is correct
18 Correct 1 ms 2132 KB Output is correct
19 Correct 1 ms 2132 KB Output is correct
20 Correct 2 ms 2132 KB Output is correct
21 Correct 1 ms 2132 KB Output is correct
22 Correct 2 ms 2132 KB Output is correct
23 Correct 1 ms 2132 KB Output is correct
24 Correct 1 ms 2132 KB Output is correct
25 Correct 66 ms 3112 KB Output is correct
26 Correct 1 ms 2132 KB Output is correct
27 Correct 1722 ms 4436 KB Output is correct
28 Correct 2580 ms 101380 KB Output is correct
29 Correct 2481 ms 84236 KB Output is correct
30 Correct 2469 ms 84036 KB Output is correct
31 Correct 2662 ms 102312 KB Output is correct
32 Correct 1 ms 2132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 252 ms 4412 KB Output is correct
2 Correct 349 ms 4436 KB Output is correct
3 Correct 325 ms 4364 KB Output is correct
4 Correct 332 ms 4308 KB Output is correct
5 Correct 345 ms 4428 KB Output is correct
6 Correct 149 ms 100864 KB Output is correct
7 Correct 161 ms 100932 KB Output is correct
8 Correct 158 ms 100868 KB Output is correct
9 Correct 181 ms 101648 KB Output is correct
10 Correct 146 ms 96844 KB Output is correct
11 Correct 141 ms 96932 KB Output is correct
12 Correct 215 ms 98620 KB Output is correct
13 Correct 172 ms 96844 KB Output is correct
14 Correct 154 ms 96844 KB Output is correct
15 Runtime error 685 ms 204576 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -