답안 #547868

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
547868 2022-04-11T22:53:23 Z racsosabe 최솟값 배열 (IZhO11_hyper) C++14
0 / 100
1346 ms 262144 KB
#include<bits/stdc++.h>
using namespace::std;

const int N = 40;
const int LOG = 20;

int n;
int m;
int a[N][N][N][N];
int ST[N][N][N][N][LOG];

void init(){
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++){
			for(int k = 0; k < n; k++){
				for(int l = 0; l < n; l++){
					ST[i][j][k][l][0] = a[i][j][k][l];
				}
			}
		}
	}
	for(int d = 1, dis = 1; 2 * dis <= m; d++, dis <<= 1){
		for(int i = 0; i < n; i++){
			for(int j = 0; j < n; j++){
				for(int k = 0; k < n; k++){
					for(int l = 0; l < n; l++){
						vector<int> pos = {i, j, k, l};
						ST[i][j][k][l][d] = INT_MAX;
						for(int mask = 0; mask < 16; mask++){
							for(int at = 0, p = 1; at < 4; at++, p <<= 1){
								if(mask & p) pos[at] += dis;
							}
							ST[i][j][k][l][d] = min(ST[i][j][k][l][d], ST[pos[0]][pos[1]][pos[2]][pos[3]][d - 1]);
							for(int at = 0, p = 1; at < 4; at++, p <<= 1){
								if(mask & p) pos[at] -= dis;
							}
						}
					}
				}
			}
		}
	}
}

int query(int i, int j, int k, int l, int dis, int pot){
	int ans = INT_MAX;
	vector<int> pos = {i, j, k, l};
	for(int mask = 0; mask < 16; mask++){
		for(int at = 0, p = 1; at < 4; at++, p <<= 1){
			if(mask & p) pos[at] += m - dis;
		}
		ans = min(ans, ST[pos[0]][pos[1]][pos[2]][pos[3]][pot]);
		for(int at = 0, p = 1; at < 4; at++, p <<= 1){
			if(mask & p) pos[at] -= m - dis;
		}
	}
	return ans;
}

int main(){
	scanf("%d %d", &n, &m);
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++){
			for(int k = 0; k < n; k++){
				for(int l = 0; l < n; l++){
					scanf("%d", &a[i][j][k][l]);
				}
			}
		}
	}
	init();
	int pot = 31 - __builtin_clz(m);
	int dis = 1 << pot;
	vector<int> v;
	for(int i = 0; i + m - 1 < n; i++){
		for(int j = 0; j + m - 1 < n; j++){
			for(int k = 0; k + m - 1 < n; k++){
				for(int l = 0; l + m - 1 < n; l++){
					v.emplace_back(query(i, j, k, l, dis, pot));
				}
			}
		}
	}
	for(int i = 0; i < v.size(); i++) printf("%d%c", v[i], " \n"[i + 1 == v.size()]);
	return 0;
}

Compilation message

hyper.cpp: In function 'int main()':
hyper.cpp:84:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |  for(int i = 0; i < v.size(); i++) printf("%d%c", v[i], " \n"[i + 1 == v.size()]);
      |                 ~~^~~~~~~~~~
hyper.cpp:84:69: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |  for(int i = 0; i < v.size(); i++) printf("%d%c", v[i], " \n"[i + 1 == v.size()]);
      |                                                               ~~~~~~^~~~~~~~~~~
hyper.cpp:61:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
hyper.cpp:66:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |      scanf("%d", &a[i][j][k][l]);
      |      ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 852 KB Output is correct
3 Correct 9 ms 4304 KB Output is correct
4 Correct 7 ms 4320 KB Output is correct
5 Correct 6 ms 4316 KB Output is correct
6 Correct 42 ms 13564 KB Output is correct
7 Correct 43 ms 13480 KB Output is correct
8 Correct 149 ms 30720 KB Output is correct
9 Correct 74 ms 33040 KB Output is correct
10 Correct 143 ms 30636 KB Output is correct
11 Correct 286 ms 60172 KB Output is correct
12 Correct 605 ms 103472 KB Output is correct
13 Correct 710 ms 101840 KB Output is correct
14 Correct 563 ms 109852 KB Output is correct
15 Correct 673 ms 150916 KB Output is correct
16 Correct 1027 ms 135040 KB Output is correct
17 Correct 886 ms 137088 KB Output is correct
18 Correct 848 ms 180100 KB Output is correct
19 Correct 1058 ms 165376 KB Output is correct
20 Runtime error 1346 ms 262144 KB Execution killed with signal 11
21 Halted 0 ms 0 KB -