奇技淫巧篇1
题目链接:codeforces:C. Engineer Artem
题意:
给一数组,可以对该数组的每个值加1或者不加,每个值只能操作一次,
问:打印修改后的数组,a[i][j]值与相邻值不一样。
相邻位置比如:a[i-1][j],a[i][j-1],a[i+1][j],a[i][j+1].思路: 灵感来自0,1数组。 就比如5x5的数组。
5 5
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
不难发现该就数组就满足上述题意。该值没有和相邻的值有一样的。 再细品,而且值是满足坐标值(i+j)%2,一奇一偶形成对立。
怎么用到题目给的数组呢? 只要a[i][j]与相邻值形成对立就行了。 奇偶就是最好的对立。
代码如下:
#include<iostream>
using namespace std;
int a[110][110];
int main (){
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
int x;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
//同是奇 或者偶 原数
if((i+j)%2==a[i][j]%2) cout<<a[i][j]<<" ";
else cout<<a[i][j]+1<<" ";
}
cout<<endl;
}
}
return 0;
}