Submission #227181

# Submission time Handle Problem Language Result Execution time Memory
227181 2020-04-26T11:10:56 Z urd05 Wombats (IOI13_wombats) C++14
76 / 100
20000 ms 29052 KB
#include <bits/stdc++.h>
#include "wombats.h"
using namespace std;
 
struct Node {
    int arr[200][200];
};
 
int r,c;
const int bs=69;
int opt[200][200];
 
inline Node merge(const Node& l,const Node& r) {
    Node ret;
    for(int diff=-c+1;diff<=c-1;diff++) {
        for(int i=max(-diff,0);i<min(c-diff,c);i++) {
            int j=i+diff;
            int mini=2e9;
            for(int k=(j==0?0:opt[i][j-1]);k<=(i==c-1?c-1:opt[i+1][j]);k++) {
                if (l.arr[i][k]+r.arr[k][j]<mini) {
                    opt[i][j]=k;
                    mini=l.arr[i][k]+r.arr[k][j];
                }
            }
            ret.arr[i][j]=mini;
        }
    }
    return ret;
}
 
Node tp;
Node arr[74];
int h[5000][199];
int v[4999][200];
int dist[200];
 
void update(int node,int nodel,int noder) {
    for(int st=0;st<c;st++) {
        dist[st]=0;
        for(int i=st-1;i>=0;i--) {
            dist[i]=dist[i+1]+h[nodel][i];
        }
        for(int i=st+1;i<c;i++) {
            dist[i]=dist[i-1]+h[nodel][i-1];
        }
        for(int i=nodel+1;i<=noder;i++) {
            for(int j=0;j<c;j++) {
                dist[j]=dist[j]+v[i-1][j];
            }
            for(int j=1;j<c;j++) {
                dist[j]=min(dist[j],dist[j-1]+h[i][j-1]);
            }
            for(int j=c-2;j>=0;j--) {
                dist[j]=min(dist[j],dist[j+1]+h[i][j]);
            }
        }
        for(int i=0;i<c;i++) {
            arr[node].arr[st][i]=dist[i];
        }
    }
}
 
void init(int rr,int cc,int hh[][200],int vv[][200]) {
    r=rr;
    c=cc;
    for(int i=0;i<r;i++) {
        for(int j=0;j<c-1;j++) {
            h[i][j]=hh[i][j];
        }
    }
    for(int i=0;i<r-1;i++) {
        for(int j=0;j<c;j++) {
            v[i][j]=vv[i][j];
        }
    }
    for(int i=0;i<=(r-1)/bs;i++) {
        update(i,i*bs,min(i*bs+bs,r-1));
    }
    tp=arr[0];
    for(int i=1;i<=(r-1)/bs;i++) {
        tp=merge(tp,arr[i]);
    }
}
 
void changeH(int p,int q,int w) {
    h[p][q]=w;
    if (p%bs==0&&p!=0) {
        update(p/bs-1,(p/bs-1)*bs,(p/bs-1)*bs+bs);
        update(p/bs,p,min(p+bs,r-1));
    }
    else {
        update(p/bs,(p/bs)*bs,min((p/bs)*bs+bs,r-1));
    }
    tp=arr[0];
    for(int j=1;j<=(r-1)/bs;j++) {
        tp=merge(tp,arr[j]);
    }
}
 
void changeV(int p,int q,int w) {
    v[p][q]=w;
    update(p/bs,(p/bs)*bs,min((p/bs)*bs+bs,r-1));
    tp=arr[0];
    for(int j=1;j<=(r-1)/bs;j++) {
        tp=merge(tp,arr[j]);
    }
}
 
int escape(int v1,int v2) {
    return tp.arr[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]
  int res;
      ^~~
# Verdict Execution time Memory Grader output
1 Correct 358 ms 8696 KB Output is correct
2 Correct 332 ms 8576 KB Output is correct
3 Correct 437 ms 10224 KB Output is correct
4 Correct 336 ms 8696 KB Output is correct
5 Correct 325 ms 8696 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
7 Correct 5 ms 512 KB Output is correct
8 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 512 KB Output is correct
2 Correct 5 ms 512 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
7 Correct 5 ms 640 KB Output is correct
8 Correct 5 ms 640 KB Output is correct
9 Correct 5 ms 640 KB Output is correct
10 Correct 5 ms 640 KB Output is correct
11 Correct 91 ms 1656 KB Output is correct
12 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 289 ms 1152 KB Output is correct
2 Correct 655 ms 1152 KB Output is correct
3 Correct 584 ms 1152 KB Output is correct
4 Correct 529 ms 1152 KB Output is correct
5 Correct 631 ms 1272 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
7 Correct 5 ms 512 KB Output is correct
8 Correct 5 ms 512 KB Output is correct
9 Correct 3154 ms 1220 KB Output is correct
10 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 350 ms 16632 KB Output is correct
2 Correct 352 ms 16512 KB Output is correct
3 Correct 316 ms 16512 KB Output is correct
4 Correct 402 ms 17448 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 290 ms 1272 KB Output is correct
2 Correct 632 ms 1272 KB Output is correct
3 Correct 572 ms 1272 KB Output is correct
4 Correct 529 ms 1220 KB Output is correct
5 Correct 635 ms 1152 KB Output is correct
6 Correct 334 ms 16512 KB Output is correct
7 Correct 344 ms 16632 KB Output is correct
8 Correct 330 ms 16632 KB Output is correct
9 Correct 360 ms 17272 KB Output is correct
10 Correct 338 ms 8696 KB Output is correct
11 Correct 326 ms 8696 KB Output is correct
12 Correct 430 ms 10300 KB Output is correct
13 Correct 366 ms 8576 KB Output is correct
14 Correct 353 ms 8576 KB Output is correct
15 Correct 5 ms 512 KB Output is correct
16 Correct 5 ms 512 KB Output is correct
17 Correct 5 ms 512 KB Output is correct
18 Correct 5 ms 640 KB Output is correct
19 Correct 5 ms 640 KB Output is correct
20 Correct 5 ms 640 KB Output is correct
21 Correct 5 ms 640 KB Output is correct
22 Correct 5 ms 640 KB Output is correct
23 Correct 5 ms 640 KB Output is correct
24 Correct 5 ms 640 KB Output is correct
25 Correct 91 ms 1656 KB Output is correct
26 Correct 5 ms 640 KB Output is correct
27 Correct 3181 ms 1152 KB Output is correct
28 Correct 6570 ms 22888 KB Output is correct
29 Correct 6221 ms 18800 KB Output is correct
30 Correct 6370 ms 18904 KB Output is correct
31 Correct 6525 ms 23728 KB Output is correct
32 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 289 ms 1152 KB Output is correct
2 Correct 636 ms 1272 KB Output is correct
3 Correct 587 ms 1152 KB Output is correct
4 Correct 526 ms 1272 KB Output is correct
5 Correct 646 ms 1152 KB Output is correct
6 Correct 324 ms 16512 KB Output is correct
7 Correct 345 ms 16536 KB Output is correct
8 Correct 322 ms 16636 KB Output is correct
9 Correct 384 ms 17272 KB Output is correct
10 Correct 358 ms 8688 KB Output is correct
11 Correct 350 ms 8824 KB Output is correct
12 Correct 405 ms 10260 KB Output is correct
13 Correct 356 ms 8576 KB Output is correct
14 Correct 322 ms 8704 KB Output is correct
15 Correct 2247 ms 27976 KB Output is correct
16 Execution timed out 20049 ms 29052 KB Time limit exceeded
17 Halted 0 ms 0 KB -