답안 #1067786

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1067786 2024-08-21T03:16:31 Z sleepntsheep 웜뱃 (IOI13_wombats) C++17
21 / 100
203 ms 16196 KB
#include "wombats.h"
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;

template <typename T>
using ve = vector<T>;


int r, c, at[9999], h[5000][200], v[5000][200];
int sum = 0;


int c_is_2_dp(int V1, int V2) {
	static int dp[5001][2];
	dp[0][0] = dp[0][1] = 1e9;
	dp[0][V1] = 0;

	for (int i = 1; i < r; ++i) {
		dp[i][0] = dp[i - 1][0] + h[i - 1][0];
		dp[i][1] = dp[i - 1][1] + h[i - 1][1];
		dp[i][0] = min(dp[i][0], dp[i][1] + v[i][0]);
		dp[i][1] = min(dp[i][1], dp[i][0] + v[i][0]);
	}
	return dp[r - 1][V2];
}

void changeH(int P, int Q, int W) {
	if (c == 2) {
		h[P][Q] = W;
	}
	/* ... */
}

void changeV(int P, int Q, int W) {
	if (c == 1) {
		sum += W - at[P];
		at[P] = W;
	} else if (c == 2) {
		v[P][Q] = W;
	}
	/* ... */
}

static int floyd[401][401];
void init(int R, int C, int H[5000][200], int V[5000][200]) {
	r = R, c = C;

	if (c == 1)
		for (int i = 0; i < r; ++i) changeV(i, 0, V[i][0]);
	else if (c == 2) {
		for (int i = 0; i < r; ++i) {
			if (i + 1 < r)
				changeV(i, 0, V[i][0]), changeV(i, 1, V[i][1]);
			changeH(i, 0, H[i][0]);
		}
	} else if (r <= 20 and c <= 20) {
		auto id = [&](int p, int q) { return p * c + q; };
		memset(floyd, 63, sizeof floyd);
		for (int i = 0; i < r * c; ++i) floyd[i][i] = 0;

		for (int i = 0; i + 1 < r; ++i) for (int j = 0; j < c; ++j) {
			int u = id(i, j), v = id(i + 1, j);
			floyd[u][v] = min(floyd[u][v], V[i][j]);
		}
		for (int i = 0 ; i < r; ++i) for (int j = 0; j + 1 < c; ++j) {
			int u = id(i, j), v = id(i, j + 1);
			floyd[u][v] = min(floyd[u][v], H[i][j]);
			floyd[v][u] = min(floyd[v][u], H[i][j]);
		}
		for (int bruh=3;bruh--;)for(int i=0;i<r*c;++i)for(int j=0;j<r*c;++j)for(int k=0;k<r*c;++k)
			floyd[i][j]=min(floyd[i][j],floyd[i][k]+floyd[k][j]);
	}
}

int escape(int V1, int V2) {
	if (c == 1)
		return sum;
	else if (c == 2)
		return c_is_2_dp(V1, V2);
	return floyd[V1][c * (r - 1) + 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 2 ms 4188 KB Output is correct
2 Correct 3 ms 4188 KB Output is correct
3 Correct 38 ms 7160 KB Output is correct
4 Correct 2 ms 4280 KB Output is correct
5 Correct 2 ms 4188 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 432 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 178 ms 1076 KB Output is correct
5 Correct 166 ms 1072 KB Output is correct
6 Correct 166 ms 860 KB Output is correct
7 Correct 167 ms 856 KB Output is correct
8 Correct 124 ms 1072 KB Output is correct
9 Correct 144 ms 1076 KB Output is correct
10 Correct 144 ms 1076 KB Output is correct
11 Correct 203 ms 3404 KB Output is correct
12 Correct 175 ms 860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 34 ms 16196 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 604 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 608 KB Output isn't correct
2 Halted 0 ms 0 KB -