제출 #389166

#제출 시각아이디문제언어결과실행 시간메모리
389166crackersamdjam웜뱃 (IOI13_wombats)C++17
100 / 100
8950 ms189000 KiB
#ifndef LOCAL #pragma GCC optimize("O3","unroll-loops","omit-frame-pointer","inline") #pragma GCC option("arch=native","tune=native","no-zero-upper") #pragma GCC target("avx2") #endif #ifndef LOCAL #ifndef ONLINE_JUDGE #include "wombats.h" #endif #endif #include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #ifndef ONLINE_JUDGE template<typename T> void pr(T a){std::cerr<<a<<std::endl;} template<typename T,typename... Args> void pr(T a, Args... args) {std::cerr<<a<<' ',pr(args...);} #else template<typename... Args> void pr(Args... args){} #endif using namespace std; constexpr int MM = 5001, NN = 201, SZ = 10; #define nm ((nl+nr)/2) #define lc (rt<<1) #define rc (rt<<1|1) #define npm int nl = 0, int nr = n-1, int rt = 1 #define lpm nl, nm, lc #define rpm nm+1, nr, rc int t[MM*3/SZ][NN][NN]; int n, m; int H[MM][NN]; int V[MM][NN]; void go(int pre[NN], int cur[NN][NN], int res[NN], int l, int r, int ls, int rs){ if(l > r) return; int mm = l+r>>1, id = ls; res[mm] = 1e9; for(int i = ls; i <= rs; i++){ int v = pre[i]+cur[i][mm]; if(v < res[mm]){ res[mm] = v; id = i; } } go(pre, cur, res, l, mm-1, ls, id); go(pre, cur, res, mm+1, r, id, rs); } void pull(int rt, int nl, int nr){ for(int st = 0; st < m; st++) go(t[lc][st], t[rc], t[rt][st], 0, m-1, 0, m-1); } void child(int u, int d, int dp[NN][NN]){ int pre[NN][NN]; memset(pre, 0x3f, sizeof pre); for(int i = 0; i < m; i++) pre[i][i] = 0; for(int k = u; k <= d; k++){ for(int i = 0; i < m; i++){ for(int j = 0; j < m; j++) dp[i][j] = pre[i][j] + (k ? V[k-1][j] : 0); for(int j = 1; j < m; j++) dp[i][j] = min(dp[i][j], dp[i][j-1] + H[k][j-1]); for(int j = m-2; j >= 0; j--) dp[i][j] = min(dp[i][j], dp[i][j+1] + H[k][j]); for(int j = 0; j < m; j++) pre[i][j] = dp[i][j]; } } // pr("ch", u, d); // for(int i = 0; i < m; i++){ // for(int j = 0; j < m; j++) // cerr<<dp[i][j]<<' '; // cerr<<endl; // } } void build(npm){ if(nr-nl <= SZ){ child(nl, nr, t[rt]); return; } build(lpm); build(rpm); pull(rt, nl, nr); } void update(int i, npm){ if(nr-nl <= SZ){ child(nl, nr, t[rt]); return; } i <= nm ? update(i, lpm) : update(i, rpm); pull(rt, nl, nr); } void init(int R, int C, int _H[5000][200], int _V[5000][200]){ n = R, m = C; assert(n < MM); assert(m < NN); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ H[i][j] = _H[i][j]; V[i][j] = _V[i][j]; } } build(); } void changeH(int i, int j, int v){ H[i][j] = v; update(i); } void changeV(int i, int j, int v){ V[i][j] = v; update(i+1); } int escape(int a, int b){ return t[1][a][b]; } #ifdef LOCAL int _H[5000][200], _V[5000][200]; int main(){ // int aa[5000][200] = {{0,2,5}, {7,1,1}, {0,4,0}}; // int bb[5000][200] = {{0,0,0,2}, {0,3,4,7}}; // init(3, 4, aa, bb); int _n, _m; cin>>_n>>_m; for(int i = 0; i < _n; i++){ for(int j = 0; j < _m-1; j++){ cin>>_H[i][j]; } } for(int i = 0; i < _n-1; i++){ for(int j= 0; j < _m; j++){ cin>>_V[i][j]; } } init(_n, _m, _H, _V); // pr("_____________"); int _q; cin>>_q; while(_q--){ int a, b, c, d; cin>>a>>b>>c; if(a == 1){ cin>>d; changeH(b, c, d); } else if(a == 2){ cin>>d; changeV(b, c, d); } else if(a == 3){ cout<<escape(b, c)<<'\n'; } else abort(); } // cout<<escape(2,1)<<'\n'; // cout<<escape(3,3)<<'\n'; // changeV(0,0,5); // changeH(1,1,6); // cout<<escape(2,1)<<'\n'; } #endif

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

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
wombats.cpp:3: warning: ignoring #pragma GCC option [-Wunknown-pragmas]
    3 | #pragma GCC option("arch=native","tune=native","no-zero-upper")
      | 
wombats.cpp: In function 'void go(int*, int (*)[201], int*, int, int, int, int)':
wombats.cpp:42:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   42 |  int mm = l+r>>1, id = ls;
      |           ~^~
#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...