답안 #358295

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
358295 2021-01-25T09:46:00 Z Kerim 웜뱃 (IOI13_wombats) C++17
76 / 100
20000 ms 88184 KB
#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[R<<2];
int opt[C][C];
node merge(node x,node y,int mid){
	node z;z.fill();
	for(int len=0;len<m;len++){
		for(int i=0,k;i+len<m;i++){
			k=i+len;
			if(i==k){
				for(int j=0;j<m;j++)
					if(umin(z.dp[i][k],x.dp[i][j]+v[mid][j]+y.dp[j][k]))
						opt[i][k]=j;
			}
			else{
				for(int j=opt[i][k-1];j<=opt[i+1][k];j++)
					if(umin(z.dp[i][k],x.dp[i][j]+v[mid][j]+y.dp[j][k]))
						opt[i][k]=j;
				
				for(int j=opt[k-1][i];j<=opt[k][i+1];j++)
					if(umin(z.dp[k][i],x.dp[k][j]+v[mid][j]+y.dp[j][i]))
						opt[k][i]=j;
			}	
		}
	}
	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;
}	
const int L=10;
int odp[L][C];
node noob(int x){
	node z;z.init();
	for(int i=0;i<m;i++){
		int cur=0;
		for(int j=i;j<m;j++){
			z.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];
			z.dp[i][j]=cur;
		}
	}
	return z;
}	
void naive(int nd,int x,int y){
	seg[nd]=noob(x);
	for(int i=x;i<y;i++)
		seg[nd]=merge(seg[nd],noob(i+1),i);
}
void build(int nd,int x,int y){
	seg[nd].init();
	if(y-x<L){
		naive(nd,x,y);
		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(y<p or x>p)return;
	if(y-x<L){
		naive(nd,x,y);	
		return;
	}
	int mid=(x+y)>>1;
	upd(p,nd<<1,x,mid);
	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];
}

Compilation message

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 8684 KB Output is correct
2 Correct 12 ms 8828 KB Output is correct
3 Correct 88 ms 10348 KB Output is correct
4 Correct 10 ms 8684 KB Output is correct
5 Correct 9 ms 8684 KB Output is correct
6 Correct 1 ms 748 KB Output is correct
7 Correct 1 ms 748 KB Output is correct
8 Correct 1 ms 748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 748 KB Output is correct
2 Correct 1 ms 748 KB Output is correct
3 Correct 1 ms 748 KB Output is correct
4 Correct 2 ms 876 KB Output is correct
5 Correct 1 ms 876 KB Output is correct
6 Correct 1 ms 876 KB Output is correct
7 Correct 2 ms 876 KB Output is correct
8 Correct 1 ms 876 KB Output is correct
9 Correct 2 ms 1024 KB Output is correct
10 Correct 1 ms 876 KB Output is correct
11 Correct 81 ms 1900 KB Output is correct
12 Correct 1 ms 876 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1419 ms 3052 KB Output is correct
2 Correct 1310 ms 2796 KB Output is correct
3 Correct 1411 ms 2796 KB Output is correct
4 Correct 1449 ms 2668 KB Output is correct
5 Correct 1388 ms 2796 KB Output is correct
6 Correct 1 ms 748 KB Output is correct
7 Correct 1 ms 748 KB Output is correct
8 Correct 1 ms 748 KB Output is correct
9 Correct 6339 ms 2756 KB Output is correct
10 Correct 1 ms 876 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 16620 KB Output is correct
2 Correct 16 ms 16748 KB Output is correct
3 Correct 16 ms 16620 KB Output is correct
4 Correct 58 ms 17516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1398 ms 2872 KB Output is correct
2 Correct 1286 ms 2668 KB Output is correct
3 Correct 1430 ms 2748 KB Output is correct
4 Correct 1428 ms 2796 KB Output is correct
5 Correct 1412 ms 2796 KB Output is correct
6 Correct 18 ms 16620 KB Output is correct
7 Correct 16 ms 16620 KB Output is correct
8 Correct 16 ms 16620 KB Output is correct
9 Correct 58 ms 17516 KB Output is correct
10 Correct 9 ms 8684 KB Output is correct
11 Correct 9 ms 8684 KB Output is correct
12 Correct 89 ms 10348 KB Output is correct
13 Correct 9 ms 8684 KB Output is correct
14 Correct 10 ms 8684 KB Output is correct
15 Correct 1 ms 748 KB Output is correct
16 Correct 1 ms 748 KB Output is correct
17 Correct 1 ms 748 KB Output is correct
18 Correct 2 ms 876 KB Output is correct
19 Correct 1 ms 876 KB Output is correct
20 Correct 2 ms 876 KB Output is correct
21 Correct 2 ms 876 KB Output is correct
22 Correct 2 ms 876 KB Output is correct
23 Correct 2 ms 876 KB Output is correct
24 Correct 2 ms 876 KB Output is correct
25 Correct 84 ms 1900 KB Output is correct
26 Correct 1 ms 876 KB Output is correct
27 Correct 6180 ms 2748 KB Output is correct
28 Correct 18643 ms 61316 KB Output is correct
29 Correct 17250 ms 58872 KB Output is correct
30 Correct 17188 ms 59080 KB Output is correct
31 Correct 19020 ms 62576 KB Output is correct
32 Correct 1 ms 876 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1350 ms 2796 KB Output is correct
2 Correct 1313 ms 2924 KB Output is correct
3 Correct 1401 ms 2876 KB Output is correct
4 Correct 1412 ms 2924 KB Output is correct
5 Correct 1385 ms 2796 KB Output is correct
6 Correct 16 ms 16620 KB Output is correct
7 Correct 16 ms 16620 KB Output is correct
8 Correct 16 ms 16620 KB Output is correct
9 Correct 57 ms 17516 KB Output is correct
10 Correct 9 ms 8684 KB Output is correct
11 Correct 9 ms 8684 KB Output is correct
12 Correct 91 ms 10348 KB Output is correct
13 Correct 9 ms 8684 KB Output is correct
14 Correct 9 ms 8832 KB Output is correct
15 Execution timed out 20024 ms 88184 KB Time limit exceeded
16 Halted 0 ms 0 KB -