Submission #547890

#TimeUsernameProblemLanguageResultExecution timeMemory
547890racsosabeHyper-minimum (IZhO11_hyper)C++14
100 / 100
1008 ms66228 KiB
#include<bits/stdc++.h> using namespace::std; const int N = 35; const int LOG = 8; int n; int m; int len; int pot; int dis; int pos[5]; 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 <= n; d++, dis <<= 1){ assert(d < 8); for(int i = 0; i + 2 * dis - 1 < n; i++){ for(int j = 0; j + 2 * dis - 1 < n; j++){ for(int k = 0; k + 2 * dis - 1 < n; k++){ for(int l = 0; l + 2 * dis - 1 < n; l++){ pos[0] = i; pos[1] = j; pos[2] = k; pos[3] = 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 ans = 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] += m - dis; } if(*max_element(pos, pos + 4) >= n) while(true); 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(); pot = 0; dis = 1; while((dis << 1) <= m){ dis <<= 1; pot++; } 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++){ pos[0] = i; pos[1] = j; pos[2] = k; pos[3] = l; printf("%d%c", query(), " \n"[i + m == n and j + m == n and k + m == n and l + m == n]); } } } } return 0; }

Compilation message (stderr)

hyper.cpp: In function 'int main()':
hyper.cpp:69:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
hyper.cpp:74:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |      scanf("%d", &a[i][j][k][l]);
      |      ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...