#include <iostream>
const int MAXN = 2000;
int n, k, bottles_cnt;
int bottles[MAXN*(MAXN+1)/2];
int best_from_diag(int startrow, int bottlid)
{
int row = startrow;
int best_bottle = 99999;
int bottles_over = row + 1;
while (row < n && bottles_over <= k){
best_bottle = std::min(best_bottle, bottles[bottlid]);
row += 1;
bottlid += row + 1;
bottles_over += startrow + 1;
}
return best_bottle;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin >> n >> k;
bottles_cnt = n*(n+1)/2;
for(int i=0; i < bottles_cnt; ++i)
{
std::cin >> bottles[i];
}
int best_bottle = 99999;
int bottlid = 0;
for (int i=0; i<=n; ++i){
bottlid += i;
best_bottle = std::min(best_bottle, best_from_diag(i, bottlid));
}
std::cout << best_bottle << std::endl;
}
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 | #include <iostream> const int MAXN = 2000; int n, k, bottles_cnt; int bottles[MAXN*(MAXN+1)/2]; int best_from_diag(int startrow, int bottlid) { int row = startrow; int best_bottle = 99999; int bottles_over = row + 1; while (row < n && bottles_over <= k){ best_bottle = std::min(best_bottle, bottles[bottlid]); row += 1; bottlid += row + 1; bottles_over += startrow + 1; } return best_bottle; } int main() { std::ios::sync_with_stdio(false); std::cin >> n >> k; bottles_cnt = n*(n+1)/2; for(int i=0; i < bottles_cnt; ++i) { std::cin >> bottles[i]; } int best_bottle = 99999; int bottlid = 0; for (int i=0; i<=n; ++i){ bottlid += i; best_bottle = std::min(best_bottle, best_from_diag(i, bottlid)); } std::cout << best_bottle << std::endl; } |
English