#include <iostream>
static short int wina[2001][2001];
static int n,k;
static int min = 10000000;
static int obecne_k = 0;
void znajdzmin(int i, int j)
{
if ( (i < 1) || (i > n) || (j < 1) || (j > i) || (wina[i][j] <= 0) )
return;
if ( (obecne_k < k) && ( (i == 1) || (j == 1) || (j == i) || ( (wina[i - 1][j - 1] < 0) && (wina[i - 1][j] < 0)) ) )
{
if (wina[i][j] < min) min = wina[i][j];
bool lewy_dol = false, prawy_dol = false;
obecne_k++;
wina[i][j] *= -1;
if( (j == 1) || (wina[i][j - 1] < 0) ) lewy_dol = true;
if( (j == i) || (wina[i][j + 1] < 0) ) prawy_dol = true;
if (lewy_dol)
znajdzmin(i+1, j);
else
znajdzmin(i, j - 1);
if (prawy_dol)
znajdzmin(i+1, j + 1);
else
znajdzmin(i, j + 1);
wina[i][j] *= -1;
obecne_k--;
}
}
int main()
{
std::cin>>n;
std::cin>>k;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
std::cin>> wina[i][j];
znajdzmin(1, 1);
std::cout << min;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <iostream> static short int wina[2001][2001]; static int n,k; static int min = 10000000; static int obecne_k = 0; void znajdzmin(int i, int j) { if ( (i < 1) || (i > n) || (j < 1) || (j > i) || (wina[i][j] <= 0) ) return; if ( (obecne_k < k) && ( (i == 1) || (j == 1) || (j == i) || ( (wina[i - 1][j - 1] < 0) && (wina[i - 1][j] < 0)) ) ) { if (wina[i][j] < min) min = wina[i][j]; bool lewy_dol = false, prawy_dol = false; obecne_k++; wina[i][j] *= -1; if( (j == 1) || (wina[i][j - 1] < 0) ) lewy_dol = true; if( (j == i) || (wina[i][j + 1] < 0) ) prawy_dol = true; if (lewy_dol) znajdzmin(i+1, j); else znajdzmin(i, j - 1); if (prawy_dol) znajdzmin(i+1, j + 1); else znajdzmin(i, j + 1); wina[i][j] *= -1; obecne_k--; } } int main() { std::cin>>n; std::cin>>k; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) std::cin>> wina[i][j]; znajdzmin(1, 1); std::cout << min; } |
English