제출 #358253

#제출 시각아이디문제언어결과실행 시간메모리
358253Kerim웜뱃 (IOI13_wombats)C++17
55 / 100
7166 ms262148 KiB
#include "wombats.h" #include "bits/stdc++.h" #define MAXN 100009 #define INF 1000000007 #define mp(x,y) make_pair(x,y) #define all(v) v.begin(),v.end() #define pb(x) push_back(x) #define wr cout<<"----------------"<<endl; #define ppb() pop_back() #define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++) #define ff first #define ss second #define my_little_dodge 46 #define debug(x) cerr<< #x <<" = "<< x<<endl; using namespace std; typedef long long ll; typedef pair<int,int> PII; template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;} template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;} const int R=5005,C=202; int h[R][C],v[R][C],n,m; struct node{ vector<vector<int> >dp; void init(){ dp.resize(m); for(int i=0;i<m;i++) dp[i].resize(m); } void fill(){ init(); for(int i=0;i<m;i++) for(int j=0;j<m;j++) dp[i][j]=INF; } void print(){ for(int i=0;i<m;i++){ for(int j=0;j<m;j++) printf("%d ",dp[i][j]); puts(""); } } }seg[MAXN<<2]; node merge(node x,node y,int mid){ node z;z.fill(); for(int i=0;i<m;i++) for(int j=0;j<m;j++) for(int k=0;k<m;k++) umin(z.dp[i][k],x.dp[i][j]+v[mid][j]+y.dp[j][k]); return z; } void naive(int nd,int x){ for(int i=0;i<m;i++){ int cur=0; for(int j=i;j<m;j++){ seg[nd].dp[i][j]=cur; if(j<m-1) cur+=h[x][j]; }cur=0; for(int j=i-1;j>=0;j--){ cur+=h[x][j]; seg[nd].dp[i][j]=cur; } } } void build(int nd,int x,int y){ seg[nd].init(); if(x==y){ naive(nd,x); return; } int mid=(x+y)>>1; build(nd<<1,x,mid); build(nd<<1|1,mid+1,y); seg[nd]=merge(seg[nd<<1],seg[nd<<1|1],mid); } void upd(int p,int nd,int x,int y){ if(x==y){ naive(nd,x); return; } int mid=(x+y)>>1; if(p<=mid)upd(p,nd<<1,x,mid); else upd(p,nd<<1|1,mid+1,y); seg[nd]=merge(seg[nd<<1],seg[nd<<1|1],mid); } 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++) for(int j=0;j<m-1;j++) h[i][j]=H[i][j]; for(int i=0;i<n-1;i++) for(int j=0;j<m;j++) v[i][j]=V[i][j]; build(1,0,n-1); } void changeH(int P, int Q, int W) { h[P][Q]=W; upd(P,1,0,n-1); } void changeV(int P, int Q, int W) { v[P][Q]=W; upd(P,1,0,n-1); } int escape(int V1, int V2) { return seg[1].dp[V1][V2]; }

컴파일 시 표준 에러 (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;
      |      ^~~
#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...