fork download
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.ArrayList;
  5. import java.util.Collection;
  6. import java.util.TreeMap;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) {
  11. try {
  12. int t = Integer.parseInt(br.readLine());
  13. int n = 0, k = 0;
  14. String key = null;
  15. Integer value = 0;
  16. TreeMap<String, Integer> table = new TreeMap<String, Integer>();
  17. String data[] = null;
  18.  
  19. for (int i = 0; i < t; i++) {
  20.  
  21. data = br.readLine().split(" ");
  22. n = Integer.parseInt(data[0]);
  23. k = Integer.parseInt(data[1]);
  24.  
  25. data = br.readLine().split(" ");
  26. if(k==1){
  27. System.out.println(0);
  28. continue;
  29. }
  30. for (int j = 0; j < n; j++) {
  31. key =data[j].trim();
  32. value = table.get(key);
  33. if (value == null) {
  34. value = 0;
  35.  
  36. }
  37. value++;
  38. value = value % k;
  39. table.put(key, value);
  40.  
  41. }
  42. Collection<Integer> boquey = table.values();
  43. ArrayList<Integer> heights = new ArrayList<Integer>(boquey);
  44.  
  45. long result = 0L;
  46. int len=heights.size();
  47. int req=0;
  48. int freePool=heights.get(len-1);
  49. int j=0;
  50. for( j=len-1;j>=0;j--){
  51. if(heights.get(j)!=0){
  52. freePool=heights.get(j);
  53. break;
  54. }
  55. }
  56. j--;
  57. int current=0;
  58. int limit=0;
  59. for( ;j>0;j--){
  60. if(heights.get(j)==0){
  61. continue;
  62. }
  63. current=heights.get(j);
  64. req=k-current;
  65. limit=k/2;
  66. if(k%2!=0){
  67. limit++;
  68. }
  69. if(req<=freePool&&current>=limit){
  70. result+=req;
  71. freePool-=req;
  72. }else{
  73. freePool+=current;
  74. }
  75. }
  76. result+=freePool;
  77. table.clear();
  78. System.out.println(result);
  79. }
  80. } catch (IOException ex) {
  81. }
  82.  
  83. }
  84.  
  85. }
Success #stdin #stdout 0.05s 711168KB
stdin
1
16 4
442 55 19 865 22 878 689 67 532 419 476 33 244 473 424 945
stdout
15