首页 技术 正文
技术 2022年11月18日
0 收藏 571 点赞 3,528 浏览 874 个字

Content

有一个 \(3\times 3\) 的矩阵。一开始每个元素都为 \(1\)。

你可以对任意的位置进行操作,每次操作将在这个位置上的元素及其上下左右的元素全部由 \(1\) 改为 \(0\) 或者将 \(0\) 改为 \(1\)。

现在给定每个位置上的操作次数 \(x_{i,j}\),求执行完全部的操作后矩阵里每个元素的值。

数据范围:\(0\leqslant x_{i,j}\leqslant 100\)。

Solution

我们可以发现两个非常显然的结论:

  • 如果在某个位置上的操作次数为偶数,那么就相当于没有做。因为你做了偶数次之后,总会变回原来的元素的值,比如 \(0\rightarrow1\rightarrow0,1\rightarrow0\rightarrow1\)。
  • 如果在某个位置上的操作次数为奇数,那么就相当于只做了一次。由上面我们可以发现,做偶数次之后就相当于没做,所以做奇数次肯定只有最后一次有效果。

所以我们想到了这样的一个算法:先将矩阵上的元素全部初始化为 \(1\),然后找那个位置上的操作次数是奇数次,是奇数次就将这个位置上的元素以及其上下左右的元素全部调换,最后输出结果。

Code

#include <cstdio>
using namespace std;int a[7][7], ans[7][7];
const int dx[5] = {0, 0, 0, 1, -1};
const int dy[5] = {0, 1, -1, 0, 0};int main() {
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j)
ans[i][j] = 1;
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j) {
scanf("%d", &a[i][j]);
if(a[i][j] % 2)
for(int k = 0; k < 5; ++k)
ans[i + dx[k]][j + dy[k]] = 1 - ans[i + dx[k]][j + dy[k]];
}
for(int i = 1; i <= 3; puts(""), ++i)
for(int j = 1; j <= 3; ++j)printf("%d", ans[i][j]);
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,958
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,482
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,328
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,111
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,743
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,777