Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. public class Main {
  2.  
  3. public int min;
  4. public int[][] matrix;
  5. Scanner scan = new Scanner(System.in);
  6.  
  7. public void readSize() {
  8. String str = scan.nextLine();
  9. String[] parts = str.split(" ");
  10. int n = Integer.parseInt(parts[0]);
  11. int l = Integer.parseInt(parts[1]);
  12. matrix = new int[n][l];
  13. }
  14.  
  15. public void readData() {
  16. for (int i = 0; i < matrix.length; i++) {
  17. String str = scan.nextLine();
  18. String[] parts = str.split(" ");
  19. for (int k = 0; k < matrix[i].length; k++) {
  20. matrix[i][k] = Integer.parseInt(parts[k]);
  21. }
  22. }
  23. System.out.println();
  24. }
  25.  
  26. public void shuffleColumns(int c1, int c2) {
  27. int[] a = new int[this.matrix.length];
  28. int allCount = (1 << matrix.length);
  29. int sum1 = 0;
  30. int sum2 = 0;
  31. int tmp = 0;
  32. int min = 10000000;
  33. int optimalSplit = 0;
  34. for (int i = 0; i < matrix.length; i++) {
  35. a[i] = Math.abs(this.matrix[i][c1] - this.matrix[i][c2]);
  36. }
  37. for (int i = 0; i < allCount; i++) {
  38. sum1 = 0;
  39. sum2 = 0;
  40. for (int k = 0; k < a.length; k++) {
  41. if ((i & (1 << k)) == 0) {
  42. sum1 += a[k];
  43. } else {
  44. sum2 += a[k];
  45. }
  46. }
  47. if (min > Math.abs(sum1 - sum2)) {
  48. min = Math.abs(sum1 - sum2);
  49. optimalSplit = i;
  50. }
  51. }
  52. for (int k = 0; k < a.length; k++) {
  53. if ((optimalSplit & (1 << k)) == 0) { //max should be 2
  54. if (matrix[k][c1] >= matrix[k][c2]) { // max is 1
  55. tmp = 0;
  56. tmp = matrix[k][c2];
  57. matrix[k][c2] = matrix[k][c1];
  58. matrix[k][c1] = matrix[k][c2];
  59. }
  60. } else {
  61.  
  62. if (matrix[k][c2] >= matrix[k][c1]) { // max is 2
  63. tmp = 0;
  64. tmp = matrix[k][c2];
  65. matrix[k][c2] = matrix[k][c1];
  66. matrix[k][c1] = matrix[k][c2];
  67. }
  68. }
  69. }
  70. }
  71. public void optimizeMatrix() {
  72. for (int i = 0; i < matrix[0].length - 1; i++) {
  73. for (int k = i + 1; k < matrix[0].length; k++) {
  74. this.shuffleColumns(i, k);
  75. }
  76. }
  77. }
  78.  
  79. public void findDifference() {
  80. int[] b = new int[matrix[0].length];
  81. for (int i = 0; i < matrix[0].length; i++) {
  82. for (int k = 0; k < matrix.length; k++) {
  83. b[i] += matrix[k][i];
  84. }
  85. System.out.println(b[i]);
  86. }
  87. Arrays.sort(b);
  88. System.out.println(b[b.length - 1] - b[0]);
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement