Source code for submission s1146

Go to diff to previous submission

Main.java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5.  
  6. package folded;
  7.  
  8. import java.io.BufferedReader;
  9. import java.io.BufferedWriter;
  10. import java.io.IOException;
  11. import java.io.InputStreamReader;
  12. import java.io.OutputStreamWriter;
  13.  
  14. /**
  15.  *
  16.  * @author cteam028
  17.  */
  18. public class Main {
  19.  
  20. /**
  21.   * @param args the command line arguments
  22.   */
  23. public static void main(String[] args) throws Exception {
  24.  
  25. Main fm = new Main();
  26. fm.init();
  27.  
  28. }
  29.  
  30. public void init() throws IOException{
  31. String line;
  32.  
  33. while((line = br.readLine()) != null) {
  34. // String a[] = line.split(" ");
  35.  
  36. System.out.println("test");
  37.  
  38. final int[] arr = new int[4];
  39. parseIntArr(line.toCharArray(), arr);
  40.  
  41. final int Ar = arr[0];
  42. final int Ac = arr[1];
  43. final int Tr = arr[2];
  44. final int Tc = arr[3];
  45.  
  46. // int Ar = Integer.parseInt(a[0]);
  47. // int Ac = Integer.parseInt(a[1]);
  48. // int Tr = Integer.parseInt(a[2]);
  49. // int Tc = Integer.parseInt(a[3]);
  50.  
  51. int pole[][][][] = new int[Tr][Tc][(Ar/Tr) + 2][(Ac/Tc) + 2];
  52.  
  53. int minPole[][] = new int[Tr][Tc];
  54.  
  55. boolean[][] chpole = new boolean[Ar][Ac];
  56.  
  57. for(int x=0; x < Ar; x++) {
  58. line = br.readLine();
  59. System.out.println(line);
  60. char[] text = line.toCharArray();
  61. for(int y=0; y < Ac; y++) {
  62. chpole[x][y] = (text[y] == 'X');
  63. }
  64. }
  65. System.out.println("end1...");
  66.  
  67. for (int blockx = 0; blockx < (Ar + Tr - 1)/Tr; blockx++) {
  68. for (int blocky = 0; blocky < (Ar + Tr - 1)/Tr; blocky++) {
  69. boolean nic = true;
  70. boolean vse = true;
  71. for (int dbx = 0; dbx < Tr; dbx++) {
  72. for (int dby = 0; dby < Tc; dby++) {
  73. int x = blockx * Tr + dbx;
  74. int y = blocky * Tc + dby;
  75. if (x < Ar && y < Ac) {
  76. if (chpole[x][y]) {
  77. nic = false;
  78. } else {
  79. vse = false;
  80. }
  81. } else {
  82. break;
  83. }
  84. }
  85. }
  86.  
  87. if (nic == false) {
  88. if (vse) {
  89. for (int dbx = 0; dbx < Tr; dbx+= Tr-1) {
  90. for (int dby = 0; dby < Tc; dby+= Tc-1) {
  91. int x = blockx * Tr + dbx;
  92. int y = blocky * Tc + dby;
  93. if (x < Ar && y < Ac) {
  94. for (int dx = 0; dx < Tr; dx++) {
  95. for (int dy = 0; dy < Tc; dy++) {
  96. if (pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] == 0) {
  97. pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] = 1;
  98. minPole[dx][dy]++;
  99. }
  100.  
  101. }
  102. }
  103. }else{break;}
  104. }
  105. }
  106. } else {
  107. for (int dbx = 0; dbx < Tr; dbx++) {
  108. for (int dby = 0; dby < Tc; dby++) {
  109. int x = blockx * Tr + dbx;
  110. int y = blocky * Tc + dby;
  111. for (int dx = 0; dx < Tr; dx++) {
  112. for (int dy = 0; dy < Tc; dy++) {
  113. if (pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] == 0) {
  114. pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] = 1;
  115. minPole[dx][dy]++;
  116. }
  117.  
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. System.out.println("end.2..");
  127.  
  128.  
  129. /*for(int x=0; x < Ar; x++) {
  130.   line = br.readLine();
  131.   char[] text = line.toCharArray();
  132.   for(int y=0; y < Ac; y++) {
  133.   boolean inMap = (text[y] == 'X');
  134.   if(inMap){
  135.   for (int dx = 0; dx < Tr; dx++) {
  136.   for (int dy = 0; dy < Tc; dy++) {
  137.   if(pole[dx][dy][(x + dx)/Tr][(y + dy)/Tc] == 0){
  138.   pole[dx][dy][(x + dx)/Tr][(y + dy)/Tc] = 1;
  139.   minPole[dx][dy] ++;
  140.   }
  141.  
  142.   }
  143.   }
  144.   }
  145.   }
  146.   }*/
  147.  
  148. int min = Integer.MAX_VALUE;
  149.  
  150. for (int dx = 0; dx < Tr; dx++) {
  151. for (int dy = 0; dy < Tc; dy++) {
  152. /*int pocet = 0;
  153.   for (int idxx = 0; idxx < (Ar/Tr) + 2; idxx++) {
  154.   for (int idxy = 0; idxy < (Ac/Tc) + 2; idxy++) {
  155.   if(pole[dx][dy][idxx][idxy] == 1) pocet++;
  156.  
  157.   }
  158.   }*/
  159. min = Math.min(min, minPole[dx][dy]);
  160. }
  161. }
  162.  
  163. System.out.println("end...");
  164. bw.append(Integer.valueOf(min).toString());
  165. bw.newLine();
  166.  
  167.  
  168. }
  169. bw.flush();
  170. }
  171.  
  172. public static void parseIntArr(char[] arr, int[] target)
  173. {
  174. int i = 0;
  175. int acc = -1;
  176.  
  177. for(char ch :arr)
  178. {
  179. if(ch == ' ')
  180. {
  181. if(acc!= -1)
  182. {
  183. target[i++] = acc;
  184. acc = -1;
  185. }
  186. }
  187. else if(acc == -1)
  188. acc = ch - '0';
  189. else
  190. acc = acc * 10 + (ch - '0');
  191. }
  192. if(acc != -1)
  193. target[i] = acc;
  194. }
  195.  
  196. }
  197.  

Diff to submission s638

Main.java

--- c5.s638.cteam028.fm.java.0.Main.java
+++ c5.s1146.cteam028.fm.java.0.Main.java
@@ -22,10 +22,8 @@
      */
     public static void main(String[] args) throws Exception {
-        try {
+
             Main fm = new Main();
             fm.init();
-        } catch (ArrayIndexOutOfBoundsException ex) {
-            //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
-        }
+
     }
     
@@ -37,4 +35,6 @@
         while((line = br.readLine()) != null) {
 //            String a[] = line.split(" ");
+            
+            System.out.println("test");
 
             final int[] arr = new int[4];
@@ -55,6 +55,80 @@
             int minPole[][] = new int[Tr][Tc];
             
+            boolean[][] chpole = new boolean[Ar][Ac];
+            
             for(int x=0; x < Ar; x++) {
                 line = br.readLine();
+                System.out.println(line);
+                char[] text = line.toCharArray();
+                for(int y=0; y < Ac; y++) {
+                      chpole[x][y] =  (text[y] == 'X');            
+                }
+            }
+            System.out.println("end1...");
+            
+            for (int blockx = 0; blockx < (Ar + Tr - 1)/Tr; blockx++) {
+                for (int blocky = 0; blocky < (Ar + Tr - 1)/Tr; blocky++) {
+                    boolean nic = true;
+                    boolean vse = true;
+                    for (int dbx = 0; dbx < Tr; dbx++) {
+                        for (int dby = 0; dby < Tc; dby++) {
+                            int x = blockx * Tr + dbx;
+                            int y = blocky * Tc + dby;
+                            if (x < Ar && y < Ac) {
+                                if (chpole[x][y]) {
+                                    nic = false;
+                                } else {
+                                    vse = false;
+                                }
+                            } else {
+                                break;
+                            }
+                        }
+                    }
+                    
+                    if (nic == false) {
+                        if (vse) {
+                            for (int dbx = 0; dbx < Tr; dbx+= Tr-1) {
+                                for (int dby = 0; dby < Tc; dby+= Tc-1) {
+                                    int x = blockx * Tr + dbx;
+                                    int y = blocky * Tc + dby;
+                                    if (x < Ar && y < Ac) {
+                                    for (int dx = 0; dx < Tr; dx++) {
+                                        for (int dy = 0; dy < Tc; dy++) {
+                                            if (pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] == 0) {
+                                                pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] = 1;
+                                                minPole[dx][dy]++;
+                                            }
+
+                                        }
+                                    }
+                                    }else{break;}
+                                }
+                            }
+                        } else {
+                            for (int dbx = 0; dbx < Tr; dbx++) {
+                                for (int dby = 0; dby < Tc; dby++) {
+                                    int x = blockx * Tr + dbx;
+                                    int y = blocky * Tc + dby;
+                                    for (int dx = 0; dx < Tr; dx++) {
+                                        for (int dy = 0; dy < Tc; dy++) {
+                                            if (pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] == 0) {
+                                                pole[dx][dy][(x + dx) / Tr][(y + dy) / Tc] = 1;
+                                                minPole[dx][dy]++;
+                                            }
+
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            System.out.println("end.2..");
+
+            
+            /*for(int x=0; x < Ar; x++) {
+                line = br.readLine();
                 char[] text = line.toCharArray();
                 for(int y=0; y < Ac; y++) {
@@ -72,5 +146,5 @@
                     }                
                 }
-            }
+            }*/
             
             int min = Integer.MAX_VALUE;
@@ -89,4 +163,5 @@
             }
             
+            System.out.println("end...");
             bw.append(Integer.valueOf(min).toString());
             bw.newLine();