제출 #65112

#제출 시각아이디문제언어결과실행 시간메모리
65112gnoor웜뱃 (IOI13_wombats)C++17
76 / 100
12595 ms263168 KiB
#include "wombats.h" #include <vector> #include <cmath> #include <cstdio> #include <cstring> using namespace std; //typedef vector<vector<int>> tbl; struct tbl { int d[205][205]; tbl() { memset(d,63,sizeof(d)); } int* operator[](int x) { return d[x]; } const int* operator[](int x) const { return d[x]; } }; int r,c; int opt[200][200]; tbl combine(const tbl &a, const tbl &b) { tbl tmp; for (int sz=-c+1;sz<c;sz++) { for (int i=max(-sz,0);i<min(c-sz,c);i++) { int j=i+sz; for (int k=(j==0?0:opt[i][j-1]);k<=(i==c-1?c-1:opt[i+1][j]);k++) { if (a[i][k]+b[k][j]<tmp[i][j]) { tmp[i][j]=a[i][k]+b[k][j]; opt[i][j]=k; } } } } return tmp; } int h[5000][200]; int v[5000][200]; int qsh[5000][200]; tbl build(int row) { tbl tmp; for (int i=0;i<c;i++) { for (int j=0;j<c;j++) { tmp[i][j]=abs((i==0?0:qsh[row][i-1])-(j==0?0:qsh[row][j-1]))+v[row][j]; } } return tmp; } tbl seg[1100]; void buildseg(int id,int ll,int rr) { if (ll+20>=rr) { seg[id]=build(ll); for (int i=ll+1;i<rr;i++) { seg[id]=combine(seg[id],build(i)); } return; } int m=(ll+rr)>>1; buildseg(id*2,ll,m); buildseg(id*2+1,m,rr); seg[id]=combine(seg[id*2],seg[id*2+1]); } void update(int id,int ll,int rr,int k) { if (ll+20>=rr) { seg[id]=build(ll); for (int i=ll+1;i<rr;i++) { seg[id]=combine(seg[id],build(i)); } return; } int m=(ll+rr)>>1; if (k<m) update(id*2,ll,m,k); else update(id*2+1,m,rr,k); seg[id]=combine(seg[id*2],seg[id*2+1]); } void init(int R, int C, int H[5000][200], int V[5000][200]) { r=R; c=C; for (int i=0;i<R;i++) { for (int j=0;j<c;j++) { h[i][j]=H[i][j]; v[i][j]=V[i][j]; } } for (int i=0;i<r;i++) { qsh[i][0]=h[i][0]; for (int j=1;j<c-1;j++) { qsh[i][j]=qsh[i][j-1]+h[i][j]; } } buildseg(1,0,r); } void changeH(int P, int Q, int W) { h[P][Q]=W; qsh[P][0]=h[P][0]; for (int j=1;j<c-1;j++) { qsh[P][j]=qsh[P][j-1]+h[P][j]; } if (P) update(1,0,r,P); else update(1,0,r,P); } void changeV(int P, int Q, int W) { v[P][Q]=W; update(1,0,r,P); } int escape(int V1, int V2) { return seg[1][V1][V2]; }

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

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
#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...