fork download
  1. import java.util.*;
  2. import java.io.*;
  3. import static java.lang.Math.max;
  4. import static java.lang.Math.min;
  5. class Main
  6. {
  7. static class FastReader {
  8.  
  9. public FastReader() {
  10. }
  11.  
  12. String next() {
  13. while (st == null || !st.hasMoreTokens()) {
  14. try {
  15. st = new StringTokenizer(br.readLine());
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. return st.nextToken();
  21. }
  22.  
  23. int nextInt() {
  24. return Integer.parseInt(next());
  25. }
  26.  
  27. long nextLong() {
  28. return Long.parseLong(next());
  29. }
  30.  
  31. double nextDouble() {
  32. return Double.parseDouble(next());
  33. }
  34.  
  35. String nextLine() {
  36. String str = "";
  37. try {
  38. str = br.readLine().trim();
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. return str;
  43. }
  44. }
  45.  
  46. static class FastWriter {
  47. private final BufferedWriter bw;
  48.  
  49. public FastWriter() {
  50. this.bw = new BufferedWriter(new OutputStreamWriter(System.out));
  51. }
  52.  
  53. public void print(Object object) throws IOException {
  54. bw.append("" + object);
  55. }
  56.  
  57. public void println(Object object) throws IOException {
  58. print(object);
  59. bw.append("\n");
  60. }
  61.  
  62. public void close() throws IOException {
  63. bw.close();
  64. }
  65. }
  66. public static void main (String[] args) throws java.lang.Exception
  67. {
  68. try {
  69. FastReader fin = new FastReader();
  70. FastWriter fout = new FastWriter();
  71. int t = fin.nextInt();
  72. while(t-- > 0) {
  73. int n = fin.nextInt();
  74. int cows = fin.nextInt();
  75. long[] barns = new long[n];
  76. long maxCordinate = Long.MIN_VALUE;
  77. long minCordinate = Long.MAX_VALUE;
  78. for (int i = 0; i < n; i++) {
  79. barns[i] = fin.nextLong();
  80. maxCordinate = max(maxCordinate, barns[i]);
  81. minCordinate = min(minCordinate,barns[i]);
  82. }
  83. Arrays.sort(barns);
  84. long start = 1;
  85. long end = maxCordinate - minCordinate;
  86. while(start <= end) {
  87. long mid = (end-start)/2 + start;
  88. if(canWePlaceCows(mid,cows,barns)){
  89. start =mid+1;
  90. }
  91. else {
  92. end = mid-1;
  93. }
  94. }
  95. fout.println(end);
  96. }
  97.  
  98. fout.close();
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. return;
  102. }
  103. }
  104. private static boolean canWePlaceCows(long mid, int cows, long[] barns) {
  105. int currentCntCows = 1;
  106. long lastCow = barns[0];
  107. for(int i = 1;i<barns.length;i++){
  108. if(barns[i]-lastCow >= mid){
  109. currentCntCows++;
  110. lastCow = barns[i];
  111. }
  112. if(currentCntCows == cows){
  113. return true;
  114. }
  115. }
  116. return false;
  117. }
  118. }
Success #stdin #stdout 0.12s 57824KB
stdin
1
5 3
1
2
8
4
9
stdout
3