Submission #547881

#TimeUsernameProblemLanguageResultExecution timeMemory
547881racsosabeHyper-minimum (IZhO11_hyper)C++14
0 / 100
1578 ms135632 KiB
#include<bits/stdc++.h> using namespace::std; const int N = 40; const int LOG = 8; 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){ assert(d < 8); 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 = 0; int dis = 1; while((dis << 1) <= m){ 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 (stderr)

hyper.cpp: In function 'int main()':
hyper.cpp:89:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |  for(int i = 0; i < v.size(); i++) printf("%d%c", v[i], " \n"[i + 1 == v.size()]);
      |                 ~~^~~~~~~~~~
hyper.cpp:89:69: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |  for(int i = 0; i < v.size(); i++) printf("%d%c", v[i], " \n"[i + 1 == v.size()]);
      |                                                               ~~~~~~^~~~~~~~~~~
hyper.cpp:62:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
hyper.cpp:67:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |      scanf("%d", &a[i][j][k][l]);
      |      ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...