Go to diff to previous submission
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package folded; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /** * * @author cteam028 */ public class Main { /** * @param args the command line arguments */ Main fm = new Main(); fm.init(); } String line; while((line = br.readLine()) != null) { // String a[] = line.split(" "); final int[] arr = new int[4]; parseIntArr(line.toCharArray(), arr); final int Ar = arr[0]; final int Ac = arr[1]; final int Tr = arr[2]; final int Tc = arr[3]; // int Ar = Integer.parseInt(a[0]); // int Ac = Integer.parseInt(a[1]); // int Tr = Integer.parseInt(a[2]); // int Tc = Integer.parseInt(a[3]); int pole[][][][] = new int[Tr][Tc][(Ar/Tr) + 2][(Ac/Tc) + 2]; int minPole[][] = new int[Tr][Tc]; boolean[][] chpole = new boolean[Ar][Ac]; for(int x=0; x < Ar; x++) { line = br.readLine(); char[] text = line.toCharArray(); for(int y=0; y < Ac; y++) { chpole[x][y] = (text[y] == 'X'); } } 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]++; } } } } } } } } } /*for(int x=0; x < Ar; x++) { line = br.readLine(); char[] text = line.toCharArray(); for(int y=0; y < Ac; y++) { boolean inMap = (text[y] == 'X'); if(inMap){ 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] ++; } } } } } }*/ for (int dx = 0; dx < Tr; dx++) { for (int dy = 0; dy < Tc; dy++) { /*int pocet = 0; for (int idxx = 0; idxx < (Ar/Tr) + 2; idxx++) { for (int idxy = 0; idxy < (Ac/Tc) + 2; idxy++) { if(pole[dx][dy][idxx][idxy] == 1) pocet++; } }*/ } } bw.newLine(); } bw.flush(); } public static void parseIntArr(char[] arr, int[] target) { int i = 0; int acc = -1; for(char ch :arr) { if(ch == ' ') { if(acc!= -1) { target[i++] = acc; acc = -1; } } else if(acc == -1) acc = ch - '0'; else acc = acc * 10 + (ch - '0'); } if(acc != -1) target[i] = acc; } }
--- 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();