白準1992四叉木



https://www.acmicpc.net/problem/1992
銀2銀1銀3は同じレベルですほほほ
この問題の鍵は、圧縮できない場合は「(」で始まり、「)」で終わることです.

しゅろんり

  • 圧縮検査
    1.1検査後、0または1に圧縮した値を加算して返す
    1.2パスできない場合は、2番
  • に移動してください.
  • 4座標を分割して「(」を追加して戻る(1番論理)
  • 戻ると「」を追加
  • 終了
  • import java.io.*;
    import java.util.*;
    public class 쿼드트리 {
    
    	static int[][] array;
    	static int N;
    	static StringBuilder sb;
    	public static void main(String[] args) throws Exception{
    		// TODO Auto-generated method stub
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st;
    		N = Integer.parseInt(br.readLine());
    		array = new int[N][N];
    		for(int i=0;i<N;i++) {
    			String line = br.readLine();
    			for(int j=0;j<N;j++) {
    				array[i][j] = line.charAt(j)-'0';
    			}
    		}
    		sb= new StringBuilder();
    		
    		cd(0,0,N);
    		
    		System.out.println(sb);
    	}
    
    	public static void cd(int x,int y, int length) {
    		if(length==1) {
    			sb.append(array[x][y]);
    			return ;
    		}
    		
    		int sum = 0;
    		for(int i=x;i<x+length;i++) {
    			for(int j=y;j<y+length;j++) {
    				sum += array[i][j];
    			}
    		}
    		if(sum==0) {
    			sb.append("0");
    			return;
    		}
    		if(sum==length*length) {
    			sb.append("1");
    			return;
    		}
    		
    		int ql = length/2;
    		sb.append("(");
    		for(int i=0;i<2;i++) {
    			cd(x+(i*ql),y,ql);
    			cd(x+(i*ql),y+ql,ql);
    		}
    		sb.append(")");
    	}
    }
    

    アウトだ...1週間
    もう一度頑張って走りましょう.