Ejemplo n.º 1
0
        /**
         * 1st one: devide and conqer suggested by Leo Zhu
         */
        void devide_and_conquer(int n, int* a) 
        {
            /**
             * terminate condition
             * n == 2
             */
            if (n <= 2)
                return;

            int m = n / 2;
            int l = m / 2;
            
            /**
             * devide by shift right the middle part
             *
             * [0,l) [l, m, m+l) [m+l, n)
             */
            shift_right(m, a+l, l);

            /**
             * conquer each sub part
             * [0, l) [l, 2l) [2l, n)
             */
            devide_and_conquer(2*l, a);
            devide_and_conquer(n-2*l, a+2*l);
        }
Ejemplo n.º 2
0
void devide_and_conquer(int paper[][128], int x, int y, int size) {
    int half_size = size / 2;
    if(size != 1) {
        if(!is_available(paper, x, y, size)) {
            devide_and_conquer(paper, x, y, half_size);
            devide_and_conquer(paper, x + half_size, y, half_size);
            devide_and_conquer(paper, x, y + half_size, half_size);
            devide_and_conquer(paper, x + half_size, y + half_size, half_size);
            return ;
        }
    }
    
    switch(paper[x][y]) {
        case 1:
            pink_count++;
            break;
        case 0:
            wite_count++;
            break;
    }
}
Ejemplo n.º 3
0
int main() {
    int n;
    int paper[128][128];
    int i, j;

    scanf("%d", &n);

    for(i = 0 ; i < n ; i++) {
        for(j = 0 ; j < n ; j++) {
            scanf("%d", &paper[i][j]);
        }
    }
    
    devide_and_conquer(paper, 0, 0, n);
    
    printf("%d\n", wite_count);
    printf("%d\n", pink_count);
    
    
    
    return 0;
}