제출 #94310

#제출 시각아이디문제언어결과실행 시간메모리
94310fjzzq2002웜뱃 (IOI13_wombats)C++14
100 / 100
12627 ms182724 KiB
#pragma GCC optimize("-Ofast","-funroll-all-loops","-fno-stack-protector") #include "wombats.h" #include <bits/stdc++.h> using namespace std; int n,m,r[5000][200],d[5000][200]; void cmin(int&a,int b) {if(a>b)a=b;} struct ini { int s[200][200]; bool go; }ts[1028],aa; const int M=512; const int B=10; inline ini gen(int t) { //r[t],r[t+1],d[t] ini u; u.go=1; for(int i=0;i<m;++i) { u.s[i][i]=d[t][i]; for(int j=i;j+1<m;++j) u.s[i][j+1]=u.s[i][j]+r[t+1][j]; for(int j=i-1;j>=0;--j) u.s[i][j]=u.s[i][j+1]+r[t+1][j]; } for(int i=0;i<m;++i) { for(int j=0;j+1<m;++j) cmin(u.s[j+1][i],u.s[j][i]+r[t][j]); for(int j=m-2;j>=0;--j) cmin(u.s[j][i],u.s[j+1][i]+r[t][j]); } return u; } typedef pair<int,int> pii; void cmin(pii&a,pii b) {if(a>b)a=b;} #define fi first #define se second inline ini operator * (const ini&a,const ini&b) { static pii ts[200][200]; if(!a.go) return b; if(!b.go) return a; //(a-1,b) (a,b) (a,b+1) for(int i=0;i<m;++i) //(0,i) { int x=0,y=i; pii&u=ts[x][y]; u=pii(2.1e9,0); for(int k=0;k<m;++k) cmin(u,pii(a.s[x][k]+b.s[k][y],k)); } for(int i=0;i<m;++i) //(i,m-1) { int x=i,y=m-1; pii&u=ts[x][y]; u=pii(2.1e9,0); for(int k=0;k<m;++k) cmin(u,pii(a.s[x][k]+b.s[k][y],k)); } for(int s=m;s>=-m;--s) { for(int i=1;i<m;++i) { int j=i+s; if(j>=m-1||j<0) continue; pii&u=ts[i][j]; u=pii(2.1e9,0); for(int k=min(ts[i-1][j].se,ts[i][j+1].se); k<=ts[i][j+1].se;++k) cmin(u,pii(a.s[i][k]+b.s[k][j],k)); } } ini u; u.go=1; for(int i=0;i<m;++i) for(int j=0;j<m;++j) u.s[i][j]=ts[i][j].fi; return u; } void reb(int b) { ts[b+M].go=0; for(int t=b*B;t<=n-2&&t<(b+1)*B;++t) ts[b+M]=ts[b+M]*gen(t); for(int j=(b+M)>>1;j;j>>=1) ts[j]=ts[j+j]*ts[j+j+1]; } void init(int R, int C, int H[5000][200], int V[5000][200]) { n=R; m=C; memcpy(r,H,sizeof r); memcpy(d,V,sizeof d); for(int i=0;i<=(n-2)/B;++i) reb(i); } void changeH(int P, int Q, int W) { r[P][Q]=W; reb(P/B); if(P-1>=0&&P/B!=(P-1)/B) reb((P-1)/B); } void changeV(int P, int Q, int W) { d[P][Q]=W; reb(P/B); } int escape(int V1, int V2) { return ts[1].s[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...