洛谷题单指南-暴力枚举-P3654 First Step (ファーストステップ)
原题链接:https://www.luogu.com.cn/problem/P3654
题意解读:在r * c矩阵中,找连续k个.的总数。
解题思路:
本题直接枚举即可,
在每一行中,以每一列为起点,连续判断k个元素,如果全为'.',则方案数加1
在每一列中,以每一行为起点,连续判断k个元素,如果全为'.',则方案数加1
注意:
如果k=1,只有一个人,在行、列中判断时,'.'会被重复计数,结果需要除以2,否则只能得到80分。
100分代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
char a[N][N];
long long cnt;
int r, c, k;
int main()
{
cin >> r >> c >> k;
for(int i = 1; i <= r; i++)
for(int j = 1; j <= c; j++)
cin >> a[i][j];
//在每行找有多少连续k个"."
for(int x = 1; x <= r; x++) //遍历每行
{
for(int i = 1; i <= c - k + 1; i++) //对每一行考虑每一列作为开头
{
bool findk = true;
for(int j = i; j <= i + k - 1; j++) //判断连续k个是否为.
{
if(a[x][j] != '.')
{
findk = false;
break;
}
}
if(findk) cnt++;
}
}
//在每列找有多少连续k个"."
for(int y = 1; y <= c; y++) //遍历每列
{
for(int i = 1; i <= r - k + 1; i++) //对每一列考虑每一行作为开头
{
bool findk = true;
for(int j = i; j <= i + k - 1; j++) //判断连续k个是否为.
{
if(a[j][y] != '.')
{
findk = false;
break;
}
}
if(findk) cnt++;
}
}
if(k == 1) cnt /= 2; //如果只有1个队员,每个.在行、列都计算了一次,重复
cout << cnt;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?