-
#include<iostream> #include<cstdlib> using namespace std; int n, m; int map[100][100]; bool d[100]; int main() { cin>>n>>m; for (int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cin>>map[i][j]; } } bool pan = true; int sum = 0; for(int i = 0; i < n; i++){ for(int s = 0; s < n; s++){ d[s] = false; } pan = true; int temp = map[i][0]; int shit = 0; for(int j = 1; j < n; j++) { if(abs(temp- map[i][j])>1) { pan=false; break; } if(temp == map[i][j]){ temp = map[i][j]; continue; } else if(temp > map[i][j]){ int t = 0; for(int k = j; k < j+m; k++){ if(k >= n) break; if(k < n) { if (d[k] == false) { if(map[i][j] == map[i][k]) { d[k] = true; t++; } else break; } } } temp = map[i][j]; if(t != m) { pan = false; break; } } else if(temp < map[i][j]){ int t = 0; for (int k = j - 1; k > j - 1 - m; k--) { if(k < 0) break; if (k >= 0) { if (d[k] == false) { if(map[i][j-1] == map[i][k]) { d[k] = true; t++; } else break; } } } temp = map[i][j]; if (t != m) { pan = false; break; } } } if(pan == true) { sum++; } } for(int i = 0; i < n; i++){ for(int s = 0; s < n; s++){ d[s] = false; } pan = true; int temp = map[0][i]; int shit = 0; for(int j = 1; j < n; j++) { if(abs(temp - map[j][i])> 1) { pan = false; break; } if(temp == map[j][i]){ temp = map[j][i]; continue; } else if(temp > map[j][i]){ int t = 0; for(int k = j; k < j+m; k++){ if(k >= n) break; if(k < n) { if (d[k] == false) { if(map[j][i] == map[k][i]) { d[k] = true; t++; } else break; } } } temp = map[j][i]; if(t != m) { pan = false; break; } } else if(temp < map[j][i]){ int t = 0; for(int k = j-1; k > j-1 -m; k-- ){ if(k < 0) break; if(k >= 0){ if(d[k] == false){ if(map[j-1][i] == map[k][i]) { d[k] = true; t++; } else break; } } else break; } temp = map[j][i]; if(t != m) { pan = false; break; } } } if(pan == true) { sum++; } } cout<<sum<<endl; }
전형적인 브루트포스 문제, 크기도 크지않고 시간도 오래안걸림 2n^2승걸리는듯