1. 程式人生 > >WUST Online Judge - 2106: 熄燈問題

WUST Online Judge - 2106: 熄燈問題

boa 字符 print sca web tab esc problem AR

2106: 熄燈問題

Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Submitted: 73 Accepted: 24
[Submit][Status][Web Board]

Description

有一個由按鈕組成的矩陣,其中每行有6個按鈕,共5行;每個按鈕的位置上有一盞燈。

當按下一個按鈕後, 該按鈕以及周圍位置(上,下, 左,右)的燈都會改變狀態。如果燈原來是點亮的,就會被熄滅。如果燈原來是熄滅的,則會被點亮。

在矩陣角上的按鈕改變3盞燈的狀態,在矩陣邊上的按鈕改變4盞燈的狀態,其他的按鈕改變5盞燈的狀態。

與一盞燈毗鄰的多個按鈕被按下時,一個操作會抵消另一次操作的結果。

給定矩陣中每盞燈的初始狀態,求一種按按鈕方案,使得所有的燈都熄滅。

Input

第一行是一個正整數N, 表示需要解決的案例數。

每個案例由5行組成,每一行包括6個數字,這些數字以空格隔開,可以是0或1。0表示燈的初始狀態是熄滅,1表示燈的初始狀態是點亮的。

Output

對每個案例,首先輸出一行字符串“PUZZLE #m:”,其中m是該案例的序號(從1開始計數)。

接著按照該案例的輸入格式輸出5行,每行6個數字。1表示需要把對應的按鈕按下,0表示不需要按對應的按鈕。每個數字以一個空格隔開。

Sample Input 技術分享圖片

2
0 1 1 0 1 0
1 0 0 1 1 1
0 0 1 0 0 1
1 0 0 1 0 1
0 1 1 1 0 0
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1
1 0 1 1 0 0
0 1 0 1 0 0

Sample Output

PUZZLE #1:
1 0 1 0 0 1
1 1 0 1 0 1
0 0 1 0 1 1
1 0 0 1 0 0
0 1 0 0 0 0
PUZZLE #2:
1 0 0 1 1 1
1 1 0 0 0 0
0 0 0 1 0 0
1 1 0 1 0 1
1 0 1 1 0 1
 
代碼如下:
#include <stdio.h>

int main() {
    int i, j, k, n, t;
    int flag, temp = 0;
    int a1[7][8], a2[7][8];
    scanf("%d", &n);
    while (n--) {
        temp++;
        for (i = 0; i < 8; i++)
            a1[0][i] = a2[0][i] = 0;
        for (i = 1; i < 6; i++)
            a1[i][0] = a2[i][0] = a1[i][7] = a2[i][7] = 0;
        for (i = 1; i < 6; i++)
            for (j = 1; j < 7; j++)
                scanf("%d", &a1[i][j]);
        for (i = 1; i < 7; i++)
            a2[1][i] = 0;
LOOK:   flag = 1;
        for (i = 2; i < 6; i++)
            for (j = 1; j < 7; j++)
                a2[i][j] = (a2[i-1][j]+ a1[i-1][j] + a2[i-1][j-1] + a2[i-2][j] + a2[i-1][j+1] ) % 2;
        for (j = 1; j < 7; j++) {
            if (a1[5][j] != (a2[5][j] + a2[5][j-1] + a2[5][j+1] + a2[4][j]) % 2) {
                flag = 0;
                break;
            }
        }
        while (!flag) {
            a2[1][1]++; k = 1;
            while (a2[1][k] > 1) {
                a2[1][k] = 0;
                k++;
                a2[1][k]++;
            }
            goto LOOK;
        }
        printf("PUZZLE #%d:\n", temp);
        for (i = 1; i < 6; i++) {
            for (j = 1; j < 7; j++) {
                printf("%d", a2[i][j]);
                if (j == 6) printf("\n");
                else printf(" ");
            }
        }
    }
    return 0;
}

WUST Online Judge - 2106: 熄燈問題