fork download
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.Collections;
  8. import java.util.List;
  9.  
  10. class Solution {
  11. public static void main(String[] args) throws IOException {
  12. int t = Integer.parseInt(br.readLine());
  13. PrintWriter out = new PrintWriter(System.out);
  14. StringBuilder str = new StringBuilder("");
  15. for (int h = 1; h <= t; h++)
  16. {
  17. str.append("Case #" + h + ": ");
  18. String[] in = br.readLine().trim().split(" ");
  19. int n = Integer.parseInt(in[0]);
  20. long k = Long.parseLong(in[1]);
  21. long arr[] = new long[n];
  22. in = br.readLine().trim().split(" ");
  23. for (int i = 0; i < n; i++) {
  24. arr[i] = Long.parseLong(in[i]);
  25. }
  26. List<Long> diff = new ArrayList<>();
  27. Arrays.sort(arr);
  28. for (int i = 1; i < arr.length; i++) {
  29. long d = arr[i] - arr[i - 1];
  30. if (d > 0) {
  31. d--;
  32. }
  33. diff.add(d);
  34. }
  35. Double p = new Double(0);
  36. Collections.sort(diff);
  37.  
  38. List<Long> ans = new ArrayList<>();
  39. ans.add(k - arr[n - 1]);
  40. ans.add(arr[0] - 1);
  41. for (int j = diff.size() - 1; j >= Math.max(0, diff.size() - 2); j--) {
  42. ans.add((diff.get(j) + 1) / 2);
  43. }
  44. Collections.sort(ans);
  45. p += ans.get(ans.size() - 1);
  46. p += ans.get(ans.size() - 2);
  47. if (diff.size() > 0) {
  48. Double p2 = (double)diff.get(diff.size() - 1);
  49. if (p2 > p) {
  50. p = p2;
  51. }
  52. }
  53. str.append(p / (double)k + "\n");
  54. }
  55. out.print(str);
  56. out.flush();
  57. br.close();
  58. }
  59. }
Success #stdin #stdout 0.15s 51128KB
stdin
4
3 10
1 3 7
4 10
4 1 7 3
4 3
1 2 3 2
4 4
1 2 4 2
stdout
Case #1: 0.5
Case #2: 0.4
Case #3: 0.0
Case #4: 0.25