답안 #60227

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
60227 2018-07-23T21:58:56 Z ksun48 웜뱃 (IOI13_wombats) C++14
39 / 100
20000 ms 36368 KB
#include "wombats.h"
#include <bits/stdc++.h>
using namespace std;

typedef vector<vector<int> > Paths;
const int MAXD = 100000000; // 1e8

int r;
int c;

vector<vector<int> > h;
vector<vector<int> > v;

void pr(const Paths &ans){
	for(int i = 0; i < c; i++){
		for(int j = 0; j < c; j++){
			cout << ans[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

void dnc(const Paths &a, const Paths &b, Paths &paths, int t, int bl, int br, int ml, int mr){
	if(bl > br) return;
	// top, bottom left, bottom right
	int bm = (bl + br) / 2;
	int best = MAXD + 1;
	int bestm = -1;
	for(int m = ml; m <= mr; m++){
		int dist = a[t][m] + b[m][bm];
		if(dist < best){
			best = dist;
			bestm = m;
		}
	}
	assert(bestm != -1);
	paths[t][bm] = best;
	dnc(a, b, paths, t, bl, bm - 1, ml, bestm);
	dnc(a, b, paths, t, bm + 1, br, bestm, mr);
}

Paths join(const Paths &a, const Paths &b){
	Paths paths(c, vector<int>(c, MAXD));
	for(int i = 0; i < c; i++){
		dnc(a, b, paths, i, 0, c-1, 0, c-1);
	}
	return paths;
}

Paths horizontal(int row){
	vector<int> psums(c);
	psums[0] = 0;
	for(int i = 1; i < c; i++){
		psums[i] = psums[i-1] + h[row][i-1];
	}
	Paths paths(c, vector<int>(c, MAXD));
	for(int i = 0; i < c; i++){
		for(int j = 0; j < c; j++){
			paths[i][j] = abs(psums[j] - psums[i]);
		}
	}
	return paths;
}

Paths empty(){
	Paths p2(c, vector<int>(c, MAXD));
	for(int i = 0; i < c; i++){
		p2[i][i] = 0;
	}
	return p2;
}

Paths make(int row){
	Paths p2(c, vector<int>(c, MAXD));
	for(int i = 0; i < c; i++){
		p2[i][i] = v[row][i];
	}
	return join(horizontal(row), join(p2, horizontal(row + 1)));
}

Paths ans;

void compute(){
	ans = empty();
	for(int i = 0; i + 1 < r; i++){
		ans = join(ans, make(i));
	}
}

void init(int R, int C, int H[5000][200], int V[5000][200]) {
	r = R;
	c = C;
	h.resize(r, vector<int>(c-1, 0));
	v.resize(r-1, vector<int>(c, 0));
	for(int i = 0; i < r; i++){
		for(int j = 0; j < c-1; j++){
			h[i][j] = H[i][j];
		}
	}
	for(int i = 0; i < r-1; i++){
		for(int j = 0; j < c; j++){
			v[i][j] = V[i][j];
		}
	}
	compute();
}

void changeH(int P, int Q, int W) {
	h[P][Q] = W;
	compute();
}

void changeV(int P, int Q, int W) {
	v[P][Q] = W;
	compute();
}

int escape(int V1, int V2) {
	return ans[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]
  int res;
      ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2782 ms 4680 KB Output is correct
2 Correct 2715 ms 4872 KB Output is correct
3 Correct 2556 ms 7488 KB Output is correct
4 Correct 2651 ms 7488 KB Output is correct
5 Correct 2527 ms 7488 KB Output is correct
6 Correct 3 ms 7488 KB Output is correct
7 Correct 3 ms 7488 KB Output is correct
8 Correct 4 ms 7488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7488 KB Output is correct
2 Correct 3 ms 7488 KB Output is correct
3 Correct 3 ms 7488 KB Output is correct
4 Correct 4 ms 7488 KB Output is correct
5 Correct 4 ms 7488 KB Output is correct
6 Correct 4 ms 7488 KB Output is correct
7 Correct 4 ms 7488 KB Output is correct
8 Correct 4 ms 7488 KB Output is correct
9 Correct 5 ms 7488 KB Output is correct
10 Correct 4 ms 7488 KB Output is correct
11 Correct 87 ms 7488 KB Output is correct
12 Correct 5 ms 7488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9047 ms 7488 KB Output is correct
2 Correct 7859 ms 7488 KB Output is correct
3 Correct 8712 ms 7488 KB Output is correct
4 Correct 8879 ms 7488 KB Output is correct
5 Correct 8835 ms 7488 KB Output is correct
6 Correct 3 ms 7488 KB Output is correct
7 Correct 2 ms 7488 KB Output is correct
8 Correct 4 ms 7488 KB Output is correct
9 Execution timed out 20057 ms 7488 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4164 ms 12360 KB Output is correct
2 Correct 3812 ms 12404 KB Output is correct
3 Correct 3591 ms 12472 KB Output is correct
4 Correct 3705 ms 14036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9481 ms 14036 KB Output is correct
2 Correct 8045 ms 14036 KB Output is correct
3 Correct 9130 ms 14036 KB Output is correct
4 Correct 8958 ms 14036 KB Output is correct
5 Correct 8362 ms 14036 KB Output is correct
6 Correct 3613 ms 14036 KB Output is correct
7 Correct 3961 ms 14036 KB Output is correct
8 Correct 3677 ms 14036 KB Output is correct
9 Correct 3829 ms 15280 KB Output is correct
10 Correct 2495 ms 15280 KB Output is correct
11 Correct 2650 ms 15280 KB Output is correct
12 Correct 2636 ms 15280 KB Output is correct
13 Correct 2231 ms 15280 KB Output is correct
14 Correct 2153 ms 15280 KB Output is correct
15 Correct 3 ms 15280 KB Output is correct
16 Correct 2 ms 15280 KB Output is correct
17 Correct 2 ms 15280 KB Output is correct
18 Correct 5 ms 15280 KB Output is correct
19 Correct 4 ms 15280 KB Output is correct
20 Correct 4 ms 15280 KB Output is correct
21 Correct 4 ms 15280 KB Output is correct
22 Correct 4 ms 15280 KB Output is correct
23 Correct 5 ms 15280 KB Output is correct
24 Correct 4 ms 15280 KB Output is correct
25 Correct 89 ms 15280 KB Output is correct
26 Correct 5 ms 15280 KB Output is correct
27 Execution timed out 20070 ms 15280 KB Time limit exceeded
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9052 ms 15280 KB Output is correct
2 Correct 8909 ms 15280 KB Output is correct
3 Correct 9619 ms 15280 KB Output is correct
4 Correct 9830 ms 15280 KB Output is correct
5 Correct 9871 ms 15280 KB Output is correct
6 Correct 4201 ms 17660 KB Output is correct
7 Correct 3624 ms 17708 KB Output is correct
8 Correct 4830 ms 17776 KB Output is correct
9 Correct 4005 ms 19288 KB Output is correct
10 Correct 2376 ms 19288 KB Output is correct
11 Correct 2499 ms 19288 KB Output is correct
12 Correct 2906 ms 19288 KB Output is correct
13 Correct 3143 ms 19288 KB Output is correct
14 Correct 2445 ms 19288 KB Output is correct
15 Execution timed out 20048 ms 36368 KB Time limit exceeded
16 Halted 0 ms 0 KB -