Submission #547867

#TimeUsernameProblemLanguageResultExecution timeMemory
547867racsosabeHyper-minimum (IZhO11_hyper)C++14
0 / 100
1 ms820 KiB
#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]); } 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 (stderr)

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