题目链接: Engineer Artem
大致题意
给定一个n*m的矩阵, aij表示第i行, 第j列的数值. 对于每一个位置, 可以让该位置的数值在原有的基础上+1, 也可以让其值不改变.
要求: 使得任意两个相邻元素值不同. 最终输出一个可行解矩阵即可.
解题思路
这个题不得不说解法非常巧妙, 因为我们并不需要去最小化操作次数, 只需要求出可行解即可.
这样我们可以通过改变每个元素的奇偶性, 使得相邻元素的奇偶性不同, 这样必然是一种可行解.
那么对于(i, j)位置的元素, 我们不妨就令该位置的奇偶性和(i+j)的奇偶性相同, 这样一定保证该位置的元素与其相邻元素的奇偶性不同.
AC代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
using namespace std;
typedef long long ll;
const int N = 1E2 + 10;
int g[N][N];
int main()
{
int t; cin >> t;
while (t--) {
int n, m; cin >> n >> m;
rep(i, n) rep(j, m) scanf("%d", &g[i][j]);
rep(i, n) rep(j, m) {
int& op = g[i][j];
if (op % 2 != (i + j) % 2) op++;
}
rep(i, n) rep(j, m) printf("%d%c", g[i][j], " \n"[j == m]);
}
return 0;
}