zoukankan      html  css  js  c++  java
  • [转载] $CF275A$ 题解

    阅读原文

    给定一张 (3 imes 3) 的棋盘(起初全为 (1) ),每格均有一个操作次数。操作是将其上的数以及上下左右四格的数取反( (0) 变为 (1) , (1) 变为 (0) )。输出所有操作结束后的局面。

    题目比较简单,直接按题意模拟即可。

    本质上,同一格偶数次操作后局面不会有任何变化,于是不用考虑。为了加速,只有操作次数为偶数次时才修改。修改前要判定被修改的格子是否合法。

    然后就结束了。如有疑问,评论区见。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    inline int read()
    {
    	int ret=0,f=1;
    	char ch=getchar();
    	while(ch>'9'||ch<'0')
    	{
    		if(ch=='-')
    			f=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9')
    	{
    		ret=(ret<<1)+(ret<<3)+ch-'0';
    		ch=getchar();
    	}
    	return ret*f;
    }
    int a[4][4];
    bool b[4][4];
    inline void modify(int x,int y)
    {
    	if(b[x][y])
    		b[x][y]=0;
    	else
    		b[x][y]=1;
    }
    int main()
    {
    	for(register int i=1;i<=3;i++)
    		for(register int j=1;j<=3;j++)
    			a[i][j]=read();
    	for(register int i=1;i<=3;i++)
    		for(register int j=1;j<=3;j++)
    			b[i][j]=1;
    	for(register int i=1;i<=3;i++)
    	{
    		for(register int j=1;j<=3;j++)
    		{
    			if(a[i][j]&1)
    			{
    				modify(i,j);
    				if(i-1>0)
    					modify(i-1,j);
    				if(j-1>0)
    					modify(i,j-1);
    				if(i+1<4)
    					modify(i+1,j);
    				if(j+1<4)
    					modify(i,j+1);
    			}
    		}
    	}
    	for(register int i=1;i<=3;i++)
    	{
    		for(register int j=1;j<=3;j++)
    			printf("%d",b[i][j]);
    		printf("
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    2013-2014 NBA 东西部决赛 + 总决赛合集
    小萌库
    小萌库一周电影大合集
    小萌库
    小萌库- 新海诚那些唯美感人的动漫
    小萌库 一周漫画精彩回顾
    小萌库
    Week10-数据库
    Week9-RabbitMQ、Redis、Mysql
    Week8-python(线程、进程、协程)
  • 原文地址:https://www.cnblogs.com/Peter0701/p/11403027.html
Copyright © 2011-2022 走看看