【Codeforces】 Codeforces Round 864 (Div. 2) (补赛)

文章介绍了两道编程竞赛题目。第一题涉及在矩形迷宫中放置障碍物,以阻止从起点到终点的路径。解决方案是根据起点和终点的位置放置2-4个障碍物。第二题讨论如何通过有限次操作将矩阵转换为其旋转180度后的形式,关键在于计算不同点的数量并考虑操作次数的奇偶性。

Li Hua and Maze

题目大意:

有一个大小为 n×m 的矩形迷宫。称两个格子相邻,当且仅当它们有一条公共边。定义一条路径为若干相邻空格子的序列。

每个格子初始为空。李华可以在若干个格子中放置障碍物。他希望知道最少需要放置多少个障碍物使得不存在一条从 (x1​,y1​) 到 (x2​,y2​) 的路径。

假如你是李华,请解决这一问题。

解题思路:直接把起点或者终点围住即可,如果在角落,则只要2个,如果在边上需要3个,如果在其他地方则需要4个,分类讨论即可。

参考代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T, n, m;
ll sx, sy, fx, fy;
int check(ll x, ll y) {
	if ((x == 1 || x == n) && (y == 1 || y == m)) return 2;
	if (x == 1 || x == n || y == 1 || y == m) return 3;
	return 4;
}
int main() {
	cin >> T;
	while (T--) {
		cin >> n >> m;
		cin >> sx >> sy >> fx >> fy;
		cout << min(check(sx, sy), check(fx, fy)) << endl;
	}
	return 0;
}

Li Hua and Pattern

题目大意:给定n*n的矩阵,你可以操作k次,每次操作可以把一格从0换成1或者从1换成0,问是否能通过次操作转化成原矩阵旋转180度的图形

解题思路:先找到原图像与旋转后不同的点的个数cnt,如果k小于cnt则NO,接下来继续判断,因为必须操作k次操作,所以操作完后,如果n为偶数,则剩下的k-cnt也必须为偶数,如果n为奇数,则剩下无论多少都可以,因为可以在最中心点操作;

参考代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e3 + 5;
ll T, n, k;
int mp[N][N];
int main() {
	cin >> T;
	while (T--) {
		cin >> n >> k;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				cin >> mp[i][j];
			}
		}
		ll cnt = 0;//对称点不一样的点数对
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (mp[i][j] != mp[n - i + 1][n - j + 1]) cnt++;
			}
		}
		cnt /= 2;
		if (k >= cnt && (n % 2 == 1 || (k - cnt) % 2 == 0)) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

C

题目大意:

解题思路:

参考代码:

D

题目大意:

解题思路:

参考代码:

E

题目大意:

解题思路:

参考代码:

F

题目大意:

解题思路:

参考代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值