日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

【POJ 1222】EXTENDED LIGHTS OUT

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

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了。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 九九九九九国产 | 亚洲色图28p | 中文字幕免费在线 | 日韩精品在线观看视频 | 国产剧情一区二区 | 国产福利一区在线观看 | 国产精品一区三区 | 欧美日韩精品久久久久 | 狠狠狠狠干 | 亚洲日韩中文字幕一区 | 国产日产亚洲精品 | 亚洲毛片在线观看 | 久久99国产精一区二区三区 | 一区日韩 | 99免费视频 | 日韩免费视频网站 | 成人国产在线视频 | 美女视频一区二区三区 | www.天天干 | www.嫩草 | 欧美专区在线 | 精品少妇一区二区三区日产乱码 | 毛片视频大全 | 亚洲视频在线观看免费 | 国产在线成人 | 国产在线精品一区二区三区 | 午夜三区 | 久久精品视频一区二区三区 | 免费在线观看av | 欧美日韩亚洲一区二区 | 午夜在线精品偷拍 | 黄p网站 | 亚洲一区二区中文字幕 | 欧美日韩精品在线 | 在线v | 亚洲乱码一区二区三区三上悠亚 | 国产一区二区在线观看视频 | 狠狠干av| 午夜精品久久久久久久久久久 | 国产中文视频 | a黄视频 |