Codeforces Round #168 (Div. 2)---A. Lights Out
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output
Lenny is playing a game on a?3?×?3?grid of lights. In the beginning of the game all lights are switched on. Pressing any of the lights will toggle it and all side-adjacent lights. The goal of the game is to switch all the lights off. We consider the toggling as follows: if the light was switched on then it will be switched off, if it was switched off then it will be switched on.
Lenny has spent some time playing with the grid and by now he has pressed each light a certain number of times. Given the number of times each light is pressed, you have to print the current state of each light.
InputThe input consists of three rows. Each row contains three integers each between 0 to 100 inclusive. The?j-th number in the?i-th row is the number of times the?j-th light of the?i-th row of the grid is pressed.
OutputPrint three lines, each containing three characters. The?j-th character of the?i-th line is "1" if and only if the corresponding light is switched on, otherwise it's "0".
Sample test(s) input 1 0 0 0 0 0 0 0 1 output 001 010 100 input 1 0 1 8 8 8 2 0 3 output 010 011 100題目大意:現有3*3個開關,初始全為開著。切換(開變成關,關變成開)每一個開關的時候,與它直接相鄰的四個方向上的開關也會切換,給出每一個開關的切換次數,問最后各個開關的狀態。
解題思路:我們僅僅須要推斷每一個開關到最后總共被切換了多少次。直接推斷次數的奇偶就可以推斷某個開關最后的狀態。直接遍歷每一個開關,可是假設直接在原來的開關次數上加,會影響對后來的計算,所以,我們開了兩個數組,A[][]和B[][]。A是輸入的每一個開關的切換次數,B是最后每一個開關切換的總次數。最后在掃一遍B就可以,若B[i][j]是奇數,則狀態為0(關),否則狀態為1(開)。
AC代碼:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define INF 0x7fffffffint a[4][4], b[4][4];int main() {#ifdef sxkfreopen("in.txt","r",stdin);#endifint n;for(int i=0; i<3; i++)for(int j=0; j<3; j++)scanf("%d", &a[i][j]);memset(b,0,sizeof(b));for(int i=0; i<3; i++)for(int j=0; j<3; j++){if(a[i][j]){b[i][j] += a[i][j];if(i > 0) b[i-1][j] += a[i][j];if(i < 2) b[i+1][j] += a[i][j];if(j > 0) b[i][j-1] += a[i][j];if(j < 2) b[i][j+1] += a[i][j];}}for(int i=0; i<3; i++){for(int j=0; j<3; j++){printf("%d", b[i][j]&1^1);}printf("\n");}return 0; }總結
以上是生活随笔為你收集整理的Codeforces Round #168 (Div. 2)---A. Lights Out的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知乎创始人周源:新职人工作生活都在乎,知
- 下一篇: OPPO新旗舰参数曝光:三星2K屏幕+三