題目連結: https://zerojudge.tw/ShowProblem?problemid=b110

# 內容

我就懶

# 解題思路

每一次都將當前方格切成四塊,直到方格中只剩一個單位,然後再偵測當方格中的狀況。

# 程式碼

#include <bits/stdc++.h>
using namespace std;
char T[300000],M[300][300] ;
void set_tree(int n ,int x1 ,int y1 ,int x2 ,int y2 ){
	if (x1==x2 && y1==y2 ) T[n]=M[x1][y1]=='1'?'b':'w' ;
	else {
		int xm=(x1+x2)/2 ,ym=(y1+y2)/2 ;
		set_tree(4*n+1,x1,ym+1,xm,y2) ;
		set_tree(4*n+2,x1,y1,xm,ym) ;
		set_tree(4*n+3,xm+1,y1,x2,ym) ;
		set_tree(4*n+4,xm+1,ym+1,x2,y2) ;
		int t=0 ;
		for (int i= 1 ;i<=4 ;i++ ){
			if (T[4*n+i]=='b')t++ ;
			else if (T[4*n+i]=='w')t-- ;
		}
		if (t==4)T[n]='b' ;
		else if (t==-4)T[n]='w' ;
		else T[n]='g' ;
	}
}
void out(int n){
	printf("%c ",T[n]) ;
	if (T[n]=='g'){
		out(4*n+1) ;out(4*n+2) ;
        out(4*n+3) ;out(4*n+4) ;
	}
}
int main(){
	int N ;
	while (~scanf("%d",&N )){
		for (int i=0 ;i<N ;i++ )
			scanf("%s",&M[i]) ;
		set_tree(0,0,0,N-1,N-1) ;
		out(0) ;
		printf("\n") ;
	}
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay