#include <bits/stdc++.h> using namespace std; const int maks = 2001001; int tab[maks]; // ile butelek aby odkryć tą konkretną int poziomy, k; // ile poziomów ma stos, ile butelek bierzemy int wynik = INT_MAX; int main(){ cin >> poziomy >> k; int a = 0; for(int i = 1; i <= poziomy; i++) { for(int j = 1; j <= i; j++) { int butelka; cin >> butelka; if(poziomy == 1 or k == 1) { cout << butelka; return 0; } a++; if(j == 1) { tab[a] = tab[a - i + 1] + 1; } else if(j == i) { tab[a] = tab[a - i] + 1; } else { tab[a] = tab[a - i + 1] + tab[a - i] - tab[a - 2 * (i - 1)] + 1; } if(tab[a] <= k) { wynik = min(wynik, butelka); } } } cout << wynik; }
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 | #include <bits/stdc++.h> using namespace std; const int maks = 2001001; int tab[maks]; // ile butelek aby odkryć tą konkretną int poziomy, k; // ile poziomów ma stos, ile butelek bierzemy int wynik = INT_MAX; int main(){ cin >> poziomy >> k; int a = 0; for(int i = 1; i <= poziomy; i++) { for(int j = 1; j <= i; j++) { int butelka; cin >> butelka; if(poziomy == 1 or k == 1) { cout << butelka; return 0; } a++; if(j == 1) { tab[a] = tab[a - i + 1] + 1; } else if(j == i) { tab[a] = tab[a - i] + 1; } else { tab[a] = tab[a - i + 1] + tab[a - i] - tab[a - 2 * (i - 1)] + 1; } if(tab[a] <= k) { wynik = min(wynik, butelka); } } } cout << wynik; } |