题目大意:
有一个大小为 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;
}
![]()
题目大意:给定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
题目大意:
解题思路:
参考代码:
文章介绍了两道编程竞赛题目。第一题涉及在矩形迷宫中放置障碍物,以阻止从起点到终点的路径。解决方案是根据起点和终点的位置放置2-4个障碍物。第二题讨论如何通过有限次操作将矩阵转换为其旋转180度后的形式,关键在于计算不同点的数量并考虑操作次数的奇偶性。
1296

被折叠的 条评论
为什么被折叠?



