列表

详情


NC257431. 游游的you矩阵

描述

游游拿到了一个字符矩阵。她想知道有多少个2*2的子矩阵同时包含了'y'、'o'和'u'这三种字符?

输入描述

第一行输入两个正整数nm,代表矩阵的行数和列数。
接下来的n行,每行输入一个长度为m的、仅由英文小写字母组成的字符串,代表游游拿到的矩阵。
1\leq n, m \leq 10^3

输出描述

一个整数,代表同时包含了'y'、'o'和'u'三种字符的2*2的子矩阵数量。

示例1

输入:

3 3
yuo
uiy
our

输出:

1

说明:

只有一个2*2的子矩阵同时包含了'y'、'o'和'u'三种字符。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 17ms, 内存消耗: 1432K, 提交时间: 2023-08-13 19:05:23

#include <stdio.h>
#define N 1005
int n, m, i, j, k, c, v[130];
char s[N][N];
int ok(char *p){
	v[*p] = v[*(p+1)] = v[*(p+N)] = v[*(p+N+1)] = ++k;
	return v['y']==k && v['o']==k && v['u']==k;
}
int main(){
	scanf("%d%d", &n, &m);
	for(i=1; i<=n; i++){
		scanf("%s", s[i]+1);
	}
	for(i=1; i<n; i++){
		for(j=1; j<m; j++){
			if(ok(s[i]+j)) c++;
		}
	}
	printf("%d\n", c);
	return 0;
}

Python3 解法, 执行用时: 2420ms, 内存消耗: 5724K, 提交时间: 2023-08-13 19:02:33

n, m = map(int, input().split())
l = []
ans = 0
for i in range(n):
    l.append(input())
for i in range(n-1):
    for j in range(m-1):
        if (l[i][j:j+2]+l[i+1][j:j+2]).count('y') and (l[i][j:j+2]+l[i+1][j:j+2]).count('o') and (l[i][j:j+2]+l[i+1][j:j+2]).count('u'):
            ans += 1
print(ans)

pypy3 解法, 执行用时: 159ms, 内存消耗: 24384K, 提交时间: 2023-08-13 19:09:24

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
s = [input().strip() for _ in range(n)]
ans = 0
for i in range(n - 1):
    for j in range(m - 1):
        mid = s[i][j:j + 2] + s[i + 1][j:j + 2]
        if 'y' in mid and 'o' in mid and 'u' in mid:
            ans += 1
print(ans)

上一题