Advertisement
andkamen

not confusing at all solution

Apr 8th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. package com.codeit08_04;
  2.  
  3. import java.io.*;
  4.  
  5. public class B_Diagonals {
  6. public static void main(String[] args) throws IOException {
  7. File file = new File("diagonalsum.in");
  8. FileReader fr = new FileReader(file);
  9. BufferedReader reader = new BufferedReader(fr);
  10.  
  11. int matrixSize = Integer.parseInt(reader.readLine());
  12. int[][] matrix = new int[matrixSize][matrixSize];
  13. for (int i = 0; i < matrixSize; i++) {
  14. matrix[i] = intParse(reader.readLine().split(" "));
  15. }
  16.  
  17.  
  18. int[] rightDiag = new int[matrixSize * 2 - 1];
  19. int[] leftDiag = new int[matrixSize * 2 - 1];
  20.  
  21. for (int r = 0, c = 0; c < matrixSize; c++) {
  22. int sum = 0;
  23. for (int row = r, col = c; col < matrixSize; row++, col++) {
  24. sum += matrix[row][col];
  25. }
  26. rightDiag[matrixSize - 1 + c] = sum;
  27. }
  28.  
  29. for (int r = 1, c = 0; r < matrixSize; r++) {
  30. int sum = 0;
  31. for (int row = r, col = c; row < matrixSize; row++, col++) {
  32. sum += matrix[row][col];
  33. }
  34. rightDiag[matrixSize - 1 - r] = sum;
  35. }
  36.  
  37. for (int r = 0, c = matrixSize - 1; c >= 0; c--) {
  38. int sum = 0;
  39. for (int row = r, col = c; col >= 0; row++, col--) {
  40. sum += matrix[row][col];
  41. }
  42. leftDiag[matrixSize - 1 - (matrixSize - 1 - c)] = sum;
  43. }
  44.  
  45. for (int r = 1, c = matrixSize - 1; r < matrixSize; r++) {
  46. int sum = 0;
  47. for (int row = r, col = c; row < matrixSize; row++, col--) {
  48. sum += matrix[row][col];
  49. }
  50. leftDiag[matrixSize - 1 + r] = sum;
  51. }
  52.  
  53. int count = Integer.parseInt(reader.readLine());
  54. StringBuilder output = new StringBuilder();
  55.  
  56. for (int i = 0; i < count; i++) {
  57. int[] pos = intParse(reader.readLine().split(" "));
  58. pos[0]--;
  59. pos[1]--;
  60. int rightPos = matrixSize - 1 - (pos[0] - pos[1]);
  61. int right = rightDiag[rightPos];
  62. int leftPos = pos[1] + pos[0];
  63. int left = leftDiag[leftPos];
  64. int element = matrix[pos[0]][pos[1]];
  65.  
  66. int result = right + left - element;
  67.  
  68. output.append(result).append(System.lineSeparator());
  69. }
  70.  
  71. try (
  72. OutputStream outputStream = new FileOutputStream("diagonalsum.out");
  73. BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream))
  74. ) {
  75. bufferedWriter.write(output.toString());
  76. bufferedWriter.flush();
  77. }
  78. }
  79.  
  80. private static int[] intParse(String[] elements) {
  81. int[] ints = new int[elements.length];
  82. for (int i = 0; i < elements.length; i++) {
  83. ints[i] = Integer.parseInt(elements[i]);
  84. }
  85.  
  86. return ints;
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement