답안 #1095098

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1095098 2024-10-01T09:04:54 Z dosts 웜뱃 (IOI13_wombats) C++17
76 / 100
20000 ms 207444 KB
//Dost SEFEROĞLU
#include <bits/stdc++.h>
#include "wombats.h"
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
//#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
#define sp << " " <<    
#define all(cont) cont.begin(),cont.end()
#define vi vector<int>
const int MOD = 1e9+7,inf = 2e9;
const int Q = 2e5+50,B = 15;
int N,c;
using Matrix = int[201][201];
int sag[5000][200],as[5000][2000];

Matrix d;

void man(int l,int r) {
    for (int i=0;i<c;i++) for (int j=0;j<c;j++) d[i][j] = inf;
    for (int i=0;i<c;i++) {
        d[i][i] = 0;
        for (int j=i+1;j<c;j++) d[i][j] = d[j][i] = d[i][j-1]+sag[l-1][j-1];
    }
    for (int p=l+1;p<=r;p++) {
        for (int s = 0;s<c;s++) {
            for (int j=0;j<c;j++) {
                d[s][j] = d[s][j]+as[p-2][j];
                if (j) d[s][j] = min(d[s][j],d[s][j-1]+sag[p-1][j-1]);
            }
            for (int j=c-2;j>=0;j--){
                d[s][j] = min(d[s][j],d[s][j+1]+sag[p-1][j]);
            }
        }
    } 
}

struct ST {
    Matrix dp[5000];

    void build(int node,int l,int r) {
        if (l+B-1 >= r) {
            //BC^2
            man(l,r);
            for (int i=0;i<c;i++) {
                for (int j=0;j<c;j++) dp[node][i][j] = d[i][j];
            }
            return;
        }
        int m = (l+r) >> 1;
        build(2*node,l,m);
        build(2*node+1,m+1,r);
        for (int i=0;i<c;i++) {
            for (int j=0;j<c;j++) {
                dp[node][i][j] = inf;
                for (int k=0;k<c;k++) {
                    dp[node][i][j] = min(dp[node][i][j],
                    dp[2*node][i][k]+dp[2*node+1][k][j]+as[m-1][k]);
                }
            }
        }
    }

    void update(int node,int l,int r,int p) {
        if (l+B-1 >= r) {
            //BC^2
            man(l,r);
            for (int i=0;i<c;i++) {
                for (int j=0;j<c;j++) dp[node][i][j] = d[i][j];
            }
            return;
        }
        int m = (l+r) >> 1;
        if  (p<=m) update(2*node,l,m,p);
        else update(2*node+1,m+1,r,p);
        for (int i=0;i<c;i++) {
            for (int j=0;j<c;j++) {
                dp[node][i][j] = inf;
                for (int k=0;k<c;k++) {
                    dp[node][i][j] = min(dp[node][i][j],
                    dp[2*node][i][k]+dp[2*node+1][k][j]+as[m-1][k]);
                }
            }
        }   
    }
} st;

void init(int32_t R, int32_t C, int32_t H[5000][200], int32_t V[5000][200]) {
    N = R,c = C;
    for (int i=0;i<N;i++) {
        for (int j=0;j<c-1;j++) sag[i][j] = H[i][j];
        if (i<N-1) for (int j=0;j<c;j++) as[i][j] = V[i][j];
    };
    st.build(1,1,N);
}

void changeH(int32_t P, int32_t Q, int32_t W) {
    sag[P][Q] = W;
    st.update(1,1,N,P+1);
}

void changeV(int32_t P, int32_t Q, int32_t W) {
    as[P][Q] = W;
    st.update(1,1,N,P+1);
}

int32_t escape(int32_t V1, int32_t V2) {
    return st.dp[1][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 13 ms 28764 KB Output is correct
2 Correct 12 ms 28764 KB Output is correct
3 Correct 47 ms 31416 KB Output is correct
4 Correct 11 ms 28764 KB Output is correct
5 Correct 11 ms 28748 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 444 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 604 KB Output is correct
5 Correct 1 ms 444 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 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 1 ms 604 KB Output is correct
11 Correct 40 ms 2900 KB Output is correct
12 Correct 1 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 339 ms 2296 KB Output is correct
2 Correct 320 ms 2644 KB Output is correct
3 Correct 305 ms 2392 KB Output is correct
4 Correct 317 ms 2512 KB Output is correct
5 Correct 317 ms 2496 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1481 ms 2508 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 37468 KB Output is correct
2 Correct 15 ms 37468 KB Output is correct
3 Correct 15 ms 37404 KB Output is correct
4 Correct 37 ms 38784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 303 ms 2392 KB Output is correct
2 Correct 298 ms 2396 KB Output is correct
3 Correct 349 ms 2396 KB Output is correct
4 Correct 308 ms 2392 KB Output is correct
5 Correct 304 ms 2396 KB Output is correct
6 Correct 14 ms 37468 KB Output is correct
7 Correct 16 ms 37468 KB Output is correct
8 Correct 14 ms 37372 KB Output is correct
9 Correct 33 ms 38740 KB Output is correct
10 Correct 10 ms 28764 KB Output is correct
11 Correct 10 ms 28764 KB Output is correct
12 Correct 45 ms 31568 KB Output is correct
13 Correct 10 ms 28764 KB Output is correct
14 Correct 10 ms 28764 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 604 KB Output is correct
19 Correct 1 ms 472 KB Output is correct
20 Correct 1 ms 604 KB Output is correct
21 Correct 0 ms 600 KB Output is correct
22 Correct 1 ms 600 KB Output is correct
23 Correct 1 ms 604 KB Output is correct
24 Correct 1 ms 432 KB Output is correct
25 Correct 38 ms 2772 KB Output is correct
26 Correct 1 ms 600 KB Output is correct
27 Correct 1484 ms 2508 KB Output is correct
28 Correct 4577 ms 122640 KB Output is correct
29 Correct 4351 ms 116052 KB Output is correct
30 Correct 4367 ms 116072 KB Output is correct
31 Correct 4473 ms 124128 KB Output is correct
32 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 335 ms 2504 KB Output is correct
2 Correct 298 ms 2392 KB Output is correct
3 Correct 313 ms 2296 KB Output is correct
4 Correct 307 ms 2356 KB Output is correct
5 Correct 297 ms 2500 KB Output is correct
6 Correct 16 ms 37464 KB Output is correct
7 Correct 15 ms 37468 KB Output is correct
8 Correct 16 ms 37468 KB Output is correct
9 Correct 38 ms 38740 KB Output is correct
10 Correct 12 ms 28760 KB Output is correct
11 Correct 11 ms 28764 KB Output is correct
12 Correct 47 ms 31620 KB Output is correct
13 Correct 12 ms 28764 KB Output is correct
14 Correct 11 ms 28764 KB Output is correct
15 Correct 4910 ms 207444 KB Output is correct
16 Execution timed out 20062 ms 206976 KB Time limit exceeded
17 Halted 0 ms 0 KB -