제출 #1149500

#제출 시각아이디문제언어결과실행 시간메모리
1149500epicci23웜뱃 (IOI13_wombats)C++20
컴파일 에러
0 ms0 KiB
#include "bits/stdc++.h" #include "wombats.h" #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() using namespace std; const int C = 205; const int R = 5005; const int BL = 73; const int INF = 3000000005; int dp[4*BL][C][C],calc[BL][C][C]; int H[R][C],V[R][C],Lf[BL],Rg[BL],n,m; inline void upd_block(int ind){ int Old[C][C],New[C][C]; for(int i=0;i<C;i++) for(int j=0;j<C;j++) Old[i][j] = New[i][j] = INF; for(int i=0;i<m;i++){ int cur = 0; Old[i][i] = V[Lf[ind]][i]; for(int j=i-1;j>=0;j--){ cur += H[Lf[ind]][j]; Old[i][j] = cur + V[Lf[ind]][j]; } cur = 0; for(int j=i+1;j<m;j++){ cur += H[Lf[ind]][j-1]; Old[i][j] = cur + V[Lf[ind]][j]; } } for(int z=Lf[ind]+1;z<=Rg[ind];z++){ for(int i=0;i<C;i++) for(int j=0;j<C;j++) New[i][j] = INF; int sum[C],cur_sum = 0; for(int i=0;i<m;i++){ sum[i] = cur_sum; cur_sum += H[z][i]; } for(int i=0;i<m;i++){ int pre_dp[C],suf_dp[C]; for(int j=0;j<C;j++) pre_dp[j]=suf_dp[j]=INF; int hm = INF; for(int j=0;j<m;j++){ hm = min(hm, Old[i][j] - sum[j]); pre_dp[j] = hm; } hm = INF; for(int j=m-1;j>=0;j--){ hm = min(hm, Old[i][j] + sum[j]); suf_dp[j] = hm; } for(int j=0;j<m;j++){ New[i][j] = min(New[i][j], V[z][j] + pre_dp[j] + sum[j]); New[i][j] = min(New[i][j], V[z][j] + suf_dp[j] - sum[j]); } } for(int i=0;i<C;i++) for(int j=0;j<C;j++) Old[i][j] = New[i][j]; } for(int i=0;i<C;i++) for(int j=0;j<C;j++) calc[ind][i][j] = Old[i][j]; } inline void merge(int rt){ for(int i=0;i<C;i++) for(int j=0;j<C;j++) dp[rt][i][j] = INF; for(int i=0;i<C;i++) for(int j=0;j<C;j++) for(int k=0;k<C;k++) dp[rt][i][k] = min(dp[rt][i][k], dp[rt*2][i][j] + dp[rt*2+1][j][k]); } void build(int rt,int l,int r){ if(l==r){ for(int i=0;i<C;i++) for(int j=0;j<C;j++) dp[rt][i][j] = calc[ind][i][j]; return; } int mid=(l+r)/2; build(rt*2,l,mid),build(rt*2+1,mid+1,r); merge(rt); } void upd(int rt,int l,int r,int ind){ if(l > ind || r < ind) return; if(l == r){ for(int i=0;i<C;i++) for(int j=0;j<C;j++) dp[rt][i][j] = calc[ind][i][j]; return; } int mid = (l+r)/2; upd(rt*2,l,mid,ind),upd(rt*2+1,mid+1,r,ind); merge(rt); } void init(int _r, int _c, int _H[5000][200], int _V[5000][200]){ n = _r, m = _c; for(int i=0;i<n;i++){ int u = i / BL; Rg[u] = i; if(i % BL == 0) Lf[u] = i; } for(int i=0;i<n;i++) for(int j=0;j+1<m;j++) H[i][j] = _H[i][j]; for(int i=0;i+1<n;i++) for(int j=0;j<m;j++) V[i][j] = _V[i][j]; for(int i=0;i<m;i++) V[n-1][i] = 0; // son blok seyini hallet for(int i=0;i<=(n-1)/BL;i++) upd_block(i); build(1,0,(n-1)/BL); } void changeH(int P, int Q, int W){ H[P][Q] = W; upd_block(P/BL); upd(1,0,(n-1)/BL,ind); } void changeV(int P, int Q, int W){ V[P][Q] = W; upd_block(P/BL); upd(1,0,(n-1)/BL,ind); } int escape(int V1, int V2){ return dp[1][V1][V2]; }

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

wombats.cpp: In function 'void build(int, int, int)':
wombats.cpp:82:71: error: 'ind' was not declared in this scope; did you mean 'int'?
   82 |         for(int i=0;i<C;i++) for(int j=0;j<C;j++) dp[rt][i][j] = calc[ind][i][j];
      |                                                                       ^~~
      |                                                                       int
wombats.cpp: In function 'void changeH(int, int, int)':
wombats.cpp:122:21: error: 'ind' was not declared in this scope; did you mean 'int'?
  122 |    upd(1,0,(n-1)/BL,ind);
      |                     ^~~
      |                     int
wombats.cpp: In function 'void changeV(int, int, int)':
wombats.cpp:128:21: error: 'ind' was not declared in this scope; did you mean 'int'?
  128 |    upd(1,0,(n-1)/BL,ind);
      |                     ^~~
      |                     int