Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Main {
- public int min;
- public int[][] matrix;
- Scanner scan = new Scanner(System.in);
- public void readSize() {
- String str = scan.nextLine();
- String[] parts = str.split(" ");
- int n = Integer.parseInt(parts[0]);
- int l = Integer.parseInt(parts[1]);
- matrix = new int[n][l];
- }
- public void readData() {
- for (int i = 0; i < matrix.length; i++) {
- String str = scan.nextLine();
- String[] parts = str.split(" ");
- for (int k = 0; k < matrix[i].length; k++) {
- matrix[i][k] = Integer.parseInt(parts[k]);
- }
- }
- System.out.println();
- }
- public void shuffleColumns(int c1, int c2) {
- int[] a = new int[this.matrix.length];
- int allCount = (1 << matrix.length);
- int sum1 = 0;
- int sum2 = 0;
- int tmp = 0;
- int min = 10000000;
- int optimalSplit = 0;
- for (int i = 0; i < matrix.length; i++) {
- a[i] = Math.abs(this.matrix[i][c1] - this.matrix[i][c2]);
- }
- for (int i = 0; i < allCount; i++) {
- sum1 = 0;
- sum2 = 0;
- for (int k = 0; k < a.length; k++) {
- if ((i & (1 << k)) == 0) {
- sum1 += a[k];
- } else {
- sum2 += a[k];
- }
- }
- if (min > Math.abs(sum1 - sum2)) {
- min = Math.abs(sum1 - sum2);
- optimalSplit = i;
- }
- }
- for (int k = 0; k < a.length; k++) {
- if ((optimalSplit & (1 << k)) == 0) { //max should be 2
- if (matrix[k][c1] >= matrix[k][c2]) { // max is 1
- tmp = 0;
- tmp = matrix[k][c2];
- matrix[k][c2] = matrix[k][c1];
- matrix[k][c1] = matrix[k][c2];
- }
- } else {
- if (matrix[k][c2] >= matrix[k][c1]) { // max is 2
- tmp = 0;
- tmp = matrix[k][c2];
- matrix[k][c2] = matrix[k][c1];
- matrix[k][c1] = matrix[k][c2];
- }
- }
- }
- }
- public void optimizeMatrix() {
- for (int i = 0; i < matrix[0].length - 1; i++) {
- for (int k = i + 1; k < matrix[0].length; k++) {
- this.shuffleColumns(i, k);
- }
- }
- }
- public void findDifference() {
- int[] b = new int[matrix[0].length];
- for (int i = 0; i < matrix[0].length; i++) {
- for (int k = 0; k < matrix.length; k++) {
- b[i] += matrix[k][i];
- }
- System.out.println(b[i]);
- }
- Arrays.sort(b);
- System.out.println(b[b.length - 1] - b[0]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement