fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. bool checkPossible(const vector<int>& sticks, int k, int length) {
  8. int count = 0;
  9. for (int stick : sticks) {
  10. count += stick / length;
  11. }
  12. return count >= k;
  13. }
  14.  
  15. int longestPossibleLength(const vector<int>& sticks, int k) {
  16. int left = 1; // Minimum possible length
  17. int right = *max_element(sticks.begin(), sticks.end()); // Maximum possible length
  18.  
  19. while (left < right) {
  20. int mid = left + (right - left + 1) / 2;
  21. if (checkPossible(sticks, k, mid)) {
  22. left = mid;
  23. } else {
  24. right = mid - 1;
  25. }
  26. }
  27.  
  28. return left;
  29. }
  30.  
  31. int main() {
  32. int n, k;
  33. cin >> n >> k;
  34.  
  35. vector<int> sticks(n);
  36. for (int i = 0; i < n; ++i) {
  37. cin >> sticks[i];
  38. }
  39.  
  40. int result = longestPossibleLength(sticks, k);
  41. cout << result << endl;
  42.  
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0s 5280KB
stdin
3 4
30 20 100
stdout
30