【GZOJ】1308——开灯关灯

原创 2015年11月18日 23:21:20

题目链接广大OJ1308
本题亦为广大15级第一次周赛的H题。

题目内容

Problem Description
有一个3*3的九宫格,每个格子上有一盏亮着的灯

1 2 3

4 5 6

7 8 9

当按动某盏灯的开关时,这盏灯和与它相邻的灯的状态都会发生改变(由亮变暗,由暗变亮)

例如当按动灯2时, 1 2 3 5这四盏灯的状态都要改变,当按动灯5时,2,4,5,6,8这5盏灯的状态都要改变

现在给你一个3*3的数字矩阵,表示每盏灯要按动的次数

例如数字矩阵

5 9 3

3 8 1

4 7 2 表示灯1要按5次,灯2要按动9次,灯3要按动3次……

Input
输入数据第一行是一个整数 T, 接下来有 T个例子

每个例子由3行整数组成,每行整数有3个,表示各盏灯要按动的次数(各个整数均在0到100之间)

Output
对于每个例子输出一个3*3的数字矩阵表示所有按动操作完成后9盏灯的状态, 0表示灯是

暗的,1表示灯是亮的

样例输出说明 :

例子1中只需要将灯1按动1次,所以1,2,4号灯变为暗而其他灯都是亮的

例子2中灯1,2,4各要按1次,最终的状态是灯1,3,7是暗的,其他灯是亮的

解法提示

假设数组元素 b[1] -> b[9] 表示相应位置操作的次数(b[1]表示灯1按动的次数, b[2]表示灯2按动的次数……)

数组元素 a[1] -> a[9] 表示相应位置总共变动的次数(a[1]表示灯1总共改变了a[1]次状态, a[2]表示灯2总共改变了a[2]次状态……)

那么显然 a[1] = b[1] + b[2] + b[4];

a[2] = b[1] + b[2] + b[3] + b[5];

。。。。。。。。。。。。。。。。。。。。。。。。。

Sample Input
2
1 0 0
0 0 0
0 0 0
1 1 0
1 0 0
0 0 0
Sample Output
001
011
111
010
111
011

解题思路

首先先化简输入。
要注意到按同一个开关两次就跟没按一样,也就是说,假设按了97次左上角的开关,那就跟按1次左上角的开关是等效的。
接着就是按题目说的做就行了。
先初始化灯全部是开的,然后依次判断9个开关有没有被按到,如果有的话就按照按到的来改变灯。
最多按9次开关,所以远远不会超时。

代码

#include<cstdio>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a[3][3];
        for(int i=0;i<3;i++)for(int j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
            a[i][j]=a[i][j]%2;
        }
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
            {
                int b=0;
                b+=a[i][j];
                if(i-1>=0)b+=a[i-1][j];
                if(j-1>=0)b+=a[i][j-1];
                if(i+1<=2)b+=a[i+1][j];
                if(j+1<=2)b+=a[i][j+1];
                b=b%2;
                printf("%d",!b);
            }
            printf("\n");
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

简单的JavaScript实现开灯关灯效果 ↑_↑

近期做网页设计作业,感觉各种视频网站上的关灯效果很人性化,所以简易的用JavaScript写了一个   附上全部代码          无标题文档 #choose{  m...
  • NCITS
  • NCITS
  • 2012年05月05日 20:49
  • 4242

iOS开灯和关灯代码

#pragma mark 开灯与关灯 - (void)torchOnOrOff { AVCaptureDevice *device = [AVCaptureDevice defaultDevi...
  • u013538542
  • u013538542
  • 2016年01月10日 22:03
  • 1201

数学回味系列之4 - 开灯关灯问题

问题提出:        有编号1~100个灯泡,起初所有的灯都是灭的。有100个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。 现在开始按开关。   ...
  • linolzhang
  • linolzhang
  • 2017年02月21日 23:08
  • 466

UI, 关灯游戏的实现

游戏规则: UI小游戏 首先随机为每个按钮生成不同的状态(开灯或关灯), 然后点击按钮, 进行关灯; 其四周的灯, 如果是亮的, 那么这个灯将会关掉, 如果是关的, 那么该灯将会被打开, 直到所有的灯...
  • qq_28009573
  • qq_28009573
  • 2015年08月08日 19:58
  • 761

JS——开灯关灯

function turnon(){             document.getElementById("img").src="img/lightOn.jpg";              ...
  • niuyaotian
  • niuyaotian
  • 2016年07月21日 14:36
  • 939

开灯,熄灯 小游戏 的 程序解

前些天 玩一个Light On的小游戏,由于智商实在     public function test2(){             for($n=0;$n            ...
  • bluehire
  • bluehire
  • 2014年06月04日 10:55
  • 582

笔试题 百度2015大数据云计算研发笔试(关灯开灯)

有编号1~100个灯泡,起初所有的灯都是灭的。有100个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。 现在开始按开关。 第1个同学,把所有的灯泡开...
  • Claire_Bear7
  • Claire_Bear7
  • 2015年07月12日 11:42
  • 1199

android控件 ToggleButton-开关开灯关灯

ToggleButton 继承于android.widget.CompoundButton,意思是可切换的,这就说明其有不同状态,选中和没有选中,这里用ToggleButton 实现一个小例子熟悉一下...
  • u010904027
  • u010904027
  • 2016年06月04日 14:32
  • 1417

优酷新版播放器,开灯关灯特效

优酷现在更新的优酷播放器,增加了开灯关灯特效,蓝叶看着很漂亮,就花了点时间,把这个调用代码找了出来,现在就分享个需要的同学。优酷附带开灯关灯特效新版播放器的站外调用代码如下: ...
  • xiao190128
  • xiao190128
  • 2015年04月21日 09:52
  • 1376

C语言每日小练(二)——开灯问题

开灯问题~
  • u012904198
  • u012904198
  • 2014年04月09日 07:28
  • 3578
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【GZOJ】1308——开灯关灯
举报原因:
原因补充:

(最多只允许输入30个字)