답안 #1031369

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1031369 2024-07-22T18:38:49 Z tolbi 웜뱃 (IOI13_wombats) C++17
100 / 100
2830 ms 178260 KB
#pragma GCC optimize("O3,unroll-loops,fast-math")
#include "wombats.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXR = 5000;
const int MAXC = 200;
const int INF = 1e9;
constexpr int BLOK = 10;
int H[MAXR][MAXC]={},V[MAXR][MAXC]={};
int dp[(MAXR+BLOK-1)/BLOK*4][MAXC][MAXC];
int opt[MAXC][MAXC];
int cur[MAXC][MAXC];
int C,R,sz;
void merge(int x){
    if (x*2+1>=sz){
        if (x-sz/2<(R+BLOK-1)/BLOK){
            for (int i = 0; i < C; i++){
                for (int j = 0; j < C; j++){
                    dp[x][i][j]=INF;
                }
                dp[x][i][i]=0;
            }
            for (int _ = (x-sz/2)*BLOK; _ < min(R,(x-sz/2+1)*BLOK); _++){
                for (int i = 0; i < C; i++){
                    int somma = 0;
                    for (int j = i; j < C; j++){
                        cur[i][j]=somma+V[_][j];
                        somma+=H[_][j];
                    }
                    somma = 0;
                    for (int j = i-1; j >= 0; j--){
                        somma+=H[_][j];
                        cur[i][j]=somma+V[_][j];
                    }
                }
                int edp[MAXC][MAXC];
                for (int i = C-1; i >= 0; i--){
                    for (int j = 0; j < C; j++){
                        int lbound = 0;
                        int rbound = C-1;
                        if (j) lbound=opt[i][j-1];
                        if (i+1<C) rbound=opt[i+1][j];
                        edp[i][j]=dp[x][i][lbound]+cur[lbound][j];
                        opt[i][j]=lbound;
                        for (int k = lbound; k <= rbound; k++){
                            if (dp[x][i][k]+cur[k][j]<edp[i][j]){
                                edp[i][j]=dp[x][i][k]+cur[k][j];
                                opt[i][j]=k;
                            }
                        }
                    }
                }
                for (int i = 0; i < C; i++){
                    for (int j = 0; j < C; j++){
                        dp[x][i][j]=edp[i][j];
                    }
                }
            }
        }
        else {
            for (int i = 0; i < C; i++){
                for (int j = 0; j < C; j++){
                    if (i==j) dp[x][i][j]=0;
                    else dp[x][i][j]=INF;
                }
            }
        }
    }
    else {
        for (int i = C-1; i >= 0; i--){
            for (int j = 0; j < C; j++){
                int lbound = 0;
                int rbound = C-1;
                if (j) lbound=opt[i][j-1];
                if (i+1<C) rbound=opt[i+1][j];
                opt[i][j]=lbound;
                dp[x][i][j]=dp[x*2+1][i][lbound]+dp[x*2+2][lbound][j];
                for (int k = lbound; k <= rbound; k++){
                    if (dp[x*2+1][i][k]+dp[x*2+2][k][j]<dp[x][i][j]){
                        dp[x][i][j]=dp[x*2+1][i][k]+dp[x*2+2][k][j];
                        opt[i][j]=k;
                    }
                }
            }
        }
    }
}
void init(int RR, int CC, int HH[5000][200], int VV[5000][200]) {
    C=CC,R=RR;
    sz=(1LL<<((int)(ceil(log2((R+BLOK-1)/BLOK)+1))))-1;
    for (int i = 0; i < R; i++){
        for (int j = 0; j < C; j++){
            if (j+1<C) H[i][j]=HH[i][j];
            if (i+1<R) V[i][j]=VV[i][j];
        }
    }
    for (int i = sz-1; i >= 0; i--){
        merge(i);
    }
}

void changeH(int P, int Q, int W) {
    H[P][Q]=W;
    P/=BLOK;
    P+=sz/2;
    merge(P);
    while (P){
        P=(P-1)/2;
        merge(P);
    }
}

void changeV(int P, int Q, int W) {
    V[P][Q]=W;
    P/=BLOK;
    P+=sz/2;
    merge(P);
    while (P){
        P=(P-1)/2;
        merge(P);
    }
}
int escape(int V1, int V2) {
    return dp[0][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;
      |      ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 12632 KB Output is correct
2 Correct 8 ms 12640 KB Output is correct
3 Correct 43 ms 14272 KB Output is correct
4 Correct 8 ms 12636 KB Output is correct
5 Correct 7 ms 12636 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 1 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 0 ms 604 KB Output is correct
10 Correct 0 ms 604 KB Output is correct
11 Correct 37 ms 1584 KB Output is correct
12 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 79 ms 3420 KB Output is correct
2 Correct 62 ms 3420 KB Output is correct
3 Correct 81 ms 3420 KB Output is correct
4 Correct 80 ms 3620 KB Output is correct
5 Correct 108 ms 3420 KB Output is correct
6 Correct 0 ms 600 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 283 ms 3616 KB Output is correct
10 Correct 1 ms 600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 21696 KB Output is correct
2 Correct 11 ms 21596 KB Output is correct
3 Correct 11 ms 21592 KB Output is correct
4 Correct 29 ms 22244 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 3420 KB Output is correct
2 Correct 66 ms 3420 KB Output is correct
3 Correct 86 ms 3420 KB Output is correct
4 Correct 83 ms 3620 KB Output is correct
5 Correct 81 ms 3596 KB Output is correct
6 Correct 13 ms 21596 KB Output is correct
7 Correct 11 ms 21596 KB Output is correct
8 Correct 11 ms 21596 KB Output is correct
9 Correct 38 ms 22324 KB Output is correct
10 Correct 7 ms 12636 KB Output is correct
11 Correct 7 ms 12724 KB Output is correct
12 Correct 49 ms 14220 KB Output is correct
13 Correct 7 ms 12636 KB Output is correct
14 Correct 8 ms 12716 KB Output is correct
15 Correct 0 ms 604 KB Output is correct
16 Correct 1 ms 600 KB Output is correct
17 Correct 0 ms 604 KB Output is correct
18 Correct 1 ms 604 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 0 ms 604 KB Output is correct
21 Correct 1 ms 604 KB Output is correct
22 Correct 1 ms 604 KB Output is correct
23 Correct 1 ms 604 KB Output is correct
24 Correct 0 ms 604 KB Output is correct
25 Correct 37 ms 1616 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 306 ms 3620 KB Output is correct
28 Correct 674 ms 100576 KB Output is correct
29 Correct 764 ms 97864 KB Output is correct
30 Correct 841 ms 97736 KB Output is correct
31 Correct 703 ms 101712 KB Output is correct
32 Correct 0 ms 600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 3420 KB Output is correct
2 Correct 64 ms 3420 KB Output is correct
3 Correct 80 ms 3420 KB Output is correct
4 Correct 85 ms 3416 KB Output is correct
5 Correct 79 ms 3596 KB Output is correct
6 Correct 10 ms 21592 KB Output is correct
7 Correct 10 ms 21688 KB Output is correct
8 Correct 11 ms 21592 KB Output is correct
9 Correct 30 ms 22352 KB Output is correct
10 Correct 7 ms 12636 KB Output is correct
11 Correct 8 ms 12632 KB Output is correct
12 Correct 42 ms 14360 KB Output is correct
13 Correct 7 ms 12636 KB Output is correct
14 Correct 8 ms 12636 KB Output is correct
15 Correct 1064 ms 176628 KB Output is correct
16 Correct 2819 ms 178260 KB Output is correct
17 Correct 0 ms 600 KB Output is correct
18 Correct 0 ms 604 KB Output is correct
19 Correct 0 ms 604 KB Output is correct
20 Correct 0 ms 604 KB Output is correct
21 Correct 1 ms 604 KB Output is correct
22 Correct 1 ms 604 KB Output is correct
23 Correct 0 ms 604 KB Output is correct
24 Correct 0 ms 604 KB Output is correct
25 Correct 0 ms 604 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 38 ms 1636 KB Output is correct
28 Correct 1 ms 604 KB Output is correct
29 Correct 293 ms 3424 KB Output is correct
30 Correct 677 ms 100436 KB Output is correct
31 Correct 2279 ms 177168 KB Output is correct
32 Correct 2452 ms 177400 KB Output is correct
33 Correct 818 ms 97856 KB Output is correct
34 Correct 2658 ms 174512 KB Output is correct
35 Correct 746 ms 97876 KB Output is correct
36 Correct 2830 ms 174412 KB Output is correct
37 Correct 759 ms 101700 KB Output is correct
38 Correct 2720 ms 177860 KB Output is correct
39 Correct 1 ms 604 KB Output is correct
40 Correct 2804 ms 174596 KB Output is correct