【2】Codeforces Global Round 9. B. Neighbor Grid

本博客详细介绍了Codeforces Global Round 9中B题的思路与解答。针对一个二维数组,当数值不超过解法的最大值(如5x5数组的最优化解2,3,4的分布)时,可通过增加数值找到解。如果初始数值已超过最优化解,问题无解。文章提供了通过验证的C++代码实现。" 111185114,10320918,React动态列表渲染:数组map方法与React.render实战,"['React', 'JavaScript', '前端开发', 'DOM操作']
摘要由CSDN通过智能技术生成

题目

http://codeforces.com/contest/1375/problem/B
题目
题目

思路

当给定一个二维数组的时候,我们总是能够想办法构造出一个解法,除非某些值超过了限制(因为我们只能不断增加数值)。
比如一个5 x 5 二维数组,它数值最大的解如下:
2 3 3 3 2
3 4 4 4 3
3 4 4 4 3
3 4 4 4 3
2 3 3 3 2
证明:
首先,图中每个数值表示的是当前点的邻居数量,如果比该数量还大,则没有解。

  • 假如应该为4的点比4还要大,由于只有四个邻居,所以没有解。
  • 假如应该为3的点比3还要大,由于3的点都在边缘,只有三个邻居,所以没有解。
  • 假如应该为2的点比2还要大,由于2的点都在角落,只有两个邻居,所有没有解。

其次,这确实是一个合法的解。

则得到解法:

  • 假如这个二位数组的每个点的初始数值都不超过这个解,那么我们总是可以通过增加数值的方式得到这个解。
  • 如果这个二位数组有的点的初始数值已经超过了这个解,那么我们无法得到一个解答。

代码

代码均为提交通过版本。为保持比赛时原样,没有后期优化或者修改。但为方便阅读,可能会增加注释。

#include <iostream>
using namespace std;
 
int main() {
	int tcase;
	std::ios::sync_with_stdio(false);
	cin >> tcase;
	while(tcase--) {
		int n, m;
		cin >> n >> m;
		bool answer = true;
		int v[302][302];
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				int x;
				cin >> x;
				if (!answer) {
					continue;
				}
				if (x > 4) {
					answer = false;
				} else if ((i == 0 && j == 0) || (i == 0 && j == m - 1 ) || (i == n - 1 && j == 0) || (i == n - 1 && j == m - 1)) { // 四个角落上的点
					if (x >= 3) {
						answer = false;
					} else {
						v[i][j] = 2;
					}
				} else if (i == 0 || j == 0 || i == n - 1 || j == m - 1) { // 除了四个角落外的边缘的点
					if (x >= 4) {
						answer = false;
					} else {
						v[i][j] = 3;
					}
				} else {
					v[i][j] = 4;
				}
			}
		}
		if (!answer) {
			cout << "NO" << endl;
		} else {
			cout << "YES" << endl;
			for(int i = 0; i < n; i++) {
				for(int j = 0; j < m; j++) {
					cout << v[i][j] <<" ";
				}
				cout << endl;
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值