WUST Online Judge - 2106: 熄燈問題
阿新 • • 發佈:2018-06-12
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: 熄燈問題