fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4.  
  5. static boolean check(int k, ArrayList<Integer> b, int d) {
  6. int n = b.size();
  7. int sum_moves = 0;
  8. for(int i = 0; i < n; i++) {
  9. if(b.get(i) % k == 0) {
  10. sum_moves += b.get(i) / k;
  11. } else {
  12. sum_moves += (b.get(i) / k) + 1;
  13. }
  14. }
  15. return sum_moves <= d;
  16. }
  17.  
  18. public static void main(String[] args) {
  19. Scanner scanner = new Scanner(System.in);
  20. int n = scanner.nextInt();
  21. int d = scanner.nextInt();
  22.  
  23. if (d < n) {
  24. System.out.println(-1);
  25. return;
  26. }
  27.  
  28. ArrayList<Integer> b = new ArrayList<>();
  29. for(int i = 0; i < n; i++) {
  30. b.add(scanner.nextInt());
  31. }
  32.  
  33. int limit = Collections.max(b);
  34. int low = 1;
  35. int high = limit;
  36. int u = 0;
  37. int answer = 0;
  38.  
  39. while(low <= high && u == 0) {
  40. int mid = (low + high) / 2;
  41. if(!check(mid, b, d)) {
  42. low = mid + 1;
  43. } else {
  44. if(mid == 1) {
  45. u = 1;
  46. answer = mid;
  47. } else if(!check(mid - 1, b, d)) {
  48. u = 1;
  49. answer = mid;
  50. } else {
  51. high = mid - 1;
  52. }
  53. }
  54. }
  55.  
  56. System.out.println(answer);
  57. }
  58. }
Success #stdin #stdout 0.1s 54500KB
stdin
3 4
2 3 4
stdout
3