多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 【POJ 1222】EXTENDED LIGHTS OUT

【POJ 1222】EXTENDED LIGHTS OUT

來源:程序員人生   發布時間:2015-04-17 08:38:44 閱讀次數:3799次

EXTENDED LIGHTS OUT

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 7333 Accepted: 4792
Description

In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 buttons each). Each button has a light. When a button is pressed, that button and each of its (up to four) neighbors above, below, right and left, has the state of its light reversed. (If on, the light is turned off; if off, the light is turned on.) Buttons in the corners change the state of 3 buttons; buttons on an edge change the state of 4 buttons and other buttons change the state of 5. For example, if the buttons marked X on the left below were to be pressed,the display would change to the image on the right.

The aim of the game is, starting from any initial set of lights on in the display, to press buttons to get the display to a state where all lights are off. When adjacent buttons are pressed, the action of one button can undo the effect of another. For instance, in the display below, pressing buttons marked X in the left display results in the right display.Note that the buttons in row 2 column 3 and row 2 column 5 both change the state of the button in row 2 column 4,so that, in the end, its state is unchanged.

Note:
1. It does not matter what order the buttons are pressed.
2. If a button is pressed a second time, it exactly cancels the effect of the first press, so no button ever need be pressed more than once.
3. As illustrated in the second diagram, all the lights in the first row may be turned off, by pressing the corresponding buttons in the second row. By repeating this process in each row, all the lights in the first
four rows may be turned out. Similarly, by pressing buttons in columns 2, 3 ?, all lights in the first 5 columns may be turned off.
Write a program to solve the puzzle.
Input

The first line of the input is a positive integer n which is the number of puzzles that follow. Each puzzle will be five lines, each of which has six 0 or 1 separated by one or more spaces. A 0 indicates that the light is off, while a 1 indicates that the light is on initially.
Output

For each puzzle, the output consists of a line with the string: “PUZZLE #m”, where m is the index of the puzzle in the input file. Following that line, is a puzzle-like display (in the same format as the input) . In this case, 1’s indicate buttons that must be pressed to solve the puzzle, while 0 indicate buttons, which are not pressed. There should be exactly one space between each 0 or 1 in the output puzzle-like display.
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
Source

Greater New York 2002

高斯消元解異或方程組。

首先把數組標號為id[i][j],后文所說的第k個就是指他的標號id[i][j]=k

①我們用a[i][j]表示讀入的方格;

f[i][j]表示第i個方格對第j個方格有影響,即你對第i個方格履行開關操作時,j方格也被操作了(ji的10字形區域內);

③最后的答案數組為ans[i]ans[i]=1表示第i個方格被履行操作了;

tot=n?m

對1個方格(i,j),最后狀態為0,設id[i][j]=k,我們可以列出這樣的式子

a[i][j]+f[k][1]?ans[1]+f[k][2]?ans[2]+...f[k][tot]?ans[tot]=0(mod2)

由于對方程mod 2相當于取異或,我們可以把a[i][j]移到右側,方程變成:

f[k][1]?ans[1]+f[k][2]?ans[2]+...f[k][tot]?ans[tot]=a[i][j](mod2)

那末現在有tot個方程,tot個未知數,高斯消元就能夠直接出來了~

#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> #include <cstdlib> #define N 5 #define M 6 using namespace std; int a[35][35],ans[35],id[10][10],d[15][3]; void Gauss(int n,int m) { for (int i=1;i<=n;i++) { int j; for (j=i;j<=n&&!a[i][j];j++); if (j==n+1) continue; if (i!=j) for (int k=i;k<=m;k++) swap(a[i][k],a[j][k]); for (int j=i+1;j<=n;j++) if (a[j][i]) for (int k=i;k<=m;k++) a[j][k]^=a[i][k]; } for (int i=n;i;i--) { for (int j=n;j>i;j--) a[i][m]^=(a[i][j]*a[j][m]); ans[i]=a[i][m]; } } int main() { int T; scanf("%d",&T); int cnt=0; for (int i=1;i<=N;i++) for (int j=1;j<=M;j++) id[i][j]=++cnt; d[0][1]=d[0][2]=0; d[1][1]=d[2][1]=0,d[1][2]=1,d[2][2]=-1; d[3][2]=d[4][2]=0,d[3][1]=1,d[4][1]=-1; for (int t=1;t<=T;t++) { memset(a,0,sizeof(a)); printf("PUZZLE #%d ",t); for (int i=1;i<=N;i++) for (int j=1;j<=M;j++) for (int k=0;k<=4;k++) { int p=id[i+d[k][1]][j+d[k][2]]; if (p) a[id[i][j]][p]=1; else a[id[i][j]][p]=0; } for (int i=1;i<=N;i++) for (int j=1;j<=M;j++) scanf("%d",&a[id[i][j]][31]); Gauss(cnt,cnt+1); int now=0; for (int i=1;i<=N;i++) { printf("%d",ans[++now]); for (int j=2;j<=M;j++) printf(" %d",ans[++now]); printf(" "); } } return 0; }

這里寫圖片描述

感悟:

WA是由于沒有清零a數組,致使1些本來是0的在以后變成1了。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产免费高清视频在线观看不卡 | 91亚洲精品福利在线播放 | xxx日本护士www | 国产综合久久一区二区三区 | 免费一级欧美大片久久网 | 欧美刺激午夜性久久久久久久 | 日本高清www无色夜在 | 国产在线观看不卡免费高清 | 99精品小视频 | 亚洲嫩草影院在线观看 | 中国美女隐私无遮挡免费视频 | 精品亚洲福利一区二区 | 好爽好大www视频在线播放 | 最新中文字幕在线视频 | www.视频| 白浆都出来了视频国产精品 | 国产亚洲精品久久久久久牛牛 | 一级爱爱片一级毛片-一毛 一级爱一级做a性视频 | 国产久视频观看 | 国产欧美精品专区一区二区 | 午夜写真福利视频在线观看 | 公开免费视频 | 中文字幕乱码中文 | 日本三级午夜理伦三级三 | 成人午夜精品久久久久久久小说 | 久久精品一品道久久精品9 久久精品一区二区 | 成人做爰毛片免费视频 | 亚洲性影院 | 亚洲小视频在线播放 | 国产亚洲精品网站 | 一区二区三区在线免费视频 | 亚洲国产欧美日韩 | 99久久精品费精品国产一区二 | 欧美交性性 | 精品无码久久久久国产 | 亚洲色中文字幕在线播放 | 国产视频自拍一区 | 日本中文字幕永久在线 | 欧美高清性 | 日本免费人成在线网站 | 日本动漫片b站免费观看 |