제출 #1140873

#제출 시각아이디문제언어결과실행 시간메모리
1140873urosk웜뱃 (IOI13_wombats)C++20
39 / 100
20094 ms222024 KiB
#include "wombats.h"
#include "bits/stdc++.h"
#define here cerr<<"=======================================\n"
using ll = int;

using namespace std;
const ll maxn = 10005;
const ll maxh = 205;
const ll llinf = 100000000000000LL;
ll n,m;
ll t[maxh][maxh][maxn], ls[maxn],rs[maxn];
ll a[maxn][maxh];
ll b[maxn][maxh];
ll tsz = 0,root = 0;
ll ps[maxh];
void iit(ll &v,ll tl,ll tr) {
    if(!v) v = ++tsz;
    if(tl==tr) {
        for(ll i = 2;i<=m;i++) ps[i] = ps[i-1] + a[tl][i-1];
        for(ll i = 1;i<=m;i++) {
            for(ll j = 1;j<=m;j++) t[i][j][v] = ps[max(i,j)]-ps[min(i,j)];
        }
        return;
    }
    ll mid = (tl+tr)/2;
    iit(ls[v],tl,mid);
    iit(rs[v],mid+1,tr);
    for(ll i = 1;i<=m;i++) {
        for(ll j = 1;j<=m;j++) {
            t[i][j][v] = llinf;
            for(ll k = 1;k<=m;k++) t[i][j][v] = min(t[i][j][v],t[i][k][ls[v]]+t[k][j][rs[v]]+b[mid][k]);
        }
    }
}
void upd(ll v,ll tl,ll tr,ll id) {
    if(tl==tr) {
        for(ll i = 2;i<=m;i++) ps[i] = ps[i-1] + a[tl][i-1];
        for(ll i = 1;i<=m;i++) {
            for(ll j = 1;j<=m;j++) t[i][j][v] = ps[max(i,j)]-ps[min(i,j)];
        }
        return;
    }
    ll mid = (tl+tr)/2;
    if(id<=mid) upd(ls[v],tl,mid,id);
    else upd(rs[v],mid+1,tr,id);
    for(ll i = 1;i<=m;i++) {
        for(ll j = 1;j<=m;j++) {
            t[i][j][v] = llinf;
            for(ll k = 1;k<=m;k++) t[i][j][v] = min(t[i][j][v],t[i][k][ls[v]]+t[k][j][rs[v]]+b[mid][k]);
        }
    }
}
void init(int R, int C, int H[5000][200], int V[5000][200]) {
    n = R,m = C;
    for(ll i = 1;i<=n;i++) {
        for(ll j = 1;j<=m;j++) a[i][j] = H[i-1][j-1],b[i][j] = V[i-1][j-1];
    }
    iit(root,1,n);
}

void changeH(int P, int Q, int W) {
    ll x = P+1,y = Q+1,w = W;
    a[x][y] = w;
    upd(root,1,n,x);
}

void changeV(int P, int Q, int W) {
    ll x = P+1,y = Q+1,w = W;
    b[x][y] = w;
    upd(root,1,n,x);
    if(x>1) upd(root,1,n,x-1);
    else if(x<n) upd(root,1,n,x+1);
}

int escape(int V1, int V2) {
    V1++,V2++;
    return t[V1][V2][root];
}

컴파일 시 표준 에러 (stderr) 메시지

wombats.cpp:9:18: warning: overflow in conversion from 'long long int' to 'll' {aka 'int'} changes value from '100000000000000' to '276447232' [-Woverflow]
    9 | const ll llinf = 100000000000000LL;
      |                  ^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...