子矩阵 描述 一天早上,小明起床发现,自家的奶牛们身上都多了一个字母纹身,考虑到同学们最近正在准备参加CSP,于是他想找出这些奶牛在站成一个矩形时,在一个2*2的子矩阵内有没有出现’C’,’S’,’P’的组合,如果有请告诉他有多少个 day12-03.zip 输入 第一行两个整数n,m;表示矩阵大小(2<=n,m<=1000) 其后n行, 每行m个字符,表示每个牛身上的字母(只含大写字母) 输出 有”CSP”的个数 输入样例 1 3 4 CSCP PSPS CCSS 输出样例 1 5c++代码
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
char a[n][m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> a[i][j];
int cnt = 0;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < m - 1; j++)
{
int csp[26] = { 0 };
csp[a[i][j] - 'A'] += 1;
csp[a[i+1][j] - 'A'] += 1;
csp[a[i][j+1] - 'A'] += 1;
csp[a[i+1][j+1] - 'A'] += 1;
if (csp['C'-'A'] > 0 && csp['S'-'A'] > 0 && csp['P'-'A'] > 0)
cnt++;
}
cout << cnt;
}
读取输入的矩阵大小,然后创建一个二维字符向量来存储奶牛身上的字母。
使用两个嵌套的循环遍历矩阵中的每个元素,并检查是否存在'C', 'S', 'P'的组合。
如果存在,则计数器增加。最后,它输出计数器的值作为结果。
#include <iostream>
#include <vector>
using namespace std;
int count(vector<vector<char>>& matrix, int n, int m) {
int count = 0;
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < m-1; j++) {
if (matrix[i][j] == 'C' && matrix[i][j+1] == 'S' && matrix[i+1][j] == 'P') {
count++;
}
}
}
return count;
}
int main() {
int n, m;
cin >> n >> m;
vector<vector<char>> matrix(n, vector<char>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
int result = count(matrix, n, m);
cout << result << endl;
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
// 判断一个子矩阵是否包含"CSP"的组合
bool contains_CSP(const vector<string>& matrix, int row, int col) {
return matrix[row][col] == 'C' && matrix[row + 1][col] == 'S' && matrix[row][col + 1] == 'P';
}
int main() {
int n, m;
cin >> n >> m;
vector<string> matrix(n);
for (int i = 0; i < n; ++i) {
cin >> matrix[i];
}
int cspCount = 0;
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < m - 1; ++j) {
if (contains_CSP(matrix, i, j)) {
cspCount++;
}
}
}
cout << cspCount << endl;
return 0;
}
#include <iostream>
#include <vector>
#include <string>
int main() {
int n, m;
std::cin >> n >> m;
std::vector<std::string> matrix(n, std::string(m, ' '));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
std::cin >> matrix[i][j];
}
}
int count = 0;
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < m - 1; ++j) {
std::string sub_matrix = matrix[i][j] + matrix[i][j + 1] + matrix[i + 1][j] + matrix[i + 1][j + 1];
if (sub_matrix == "CSP") {
++count;
}
}
}
std::cout << count << std::endl;
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
def count_submatrix(n, m, matrix):
count = 0
for i in range(n - 1):
for j in range(m - 1):
if matrix[i][j] == 'C' and matrix[i][j+1] == 'S' and matrix[i+1][j] == 'P' and matrix[i+1][j+1] == 'S':
count += 1
return count
# 读取输入
n, m = map(int, input().split())
matrix = [input() for _ in range(n)]
# 调用函数计算子矩阵数量
result = count_submatrix(n, m, matrix)
# 输出结果
print(result)
解释:
使用双重循环遍历矩阵,依次检查每个2x2的子矩阵是否包含字母组合'C', 'S', 'P',如果是则计数器加1。最后返回计数器的值。
时间复杂度:O(n * m),其中 n 和 m 分别为矩阵的行数和列数。
空间复杂度:O(n * m),需要存储整个矩阵的数据。