首页 > 其他分享 >洛谷题单指南-暴力枚举-P3654 First Step (ファーストステップ)

洛谷题单指南-暴力枚举-P3654 First Step (ファーストステップ)

时间:2024-02-01 10:55:45浏览次数:32  
标签:int 洛谷题 枚举 long Step P3654 数加

原题链接: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;

}

 

标签:int,洛谷题,枚举,long,Step,P3654,数加
From: https://www.cnblogs.com/jcwy/p/18000747

相关文章

  • 洛谷题单指南-暴力枚举-P3392 涂国旗
    原题链接:https://www.luogu.com.cn/problem/P3392题意解读:此题枚举白、蓝、红所有可能的行数组合,依次逐行判断每个方格,是否需要染色,计算最少的染色次数即可。解题思路:总行数是n,先考虑白色,第一行必是白色,最后一行必是红色,至少有一行蓝色,因此白色行数的范围是1~n-2再考虑蓝......
  • QCN9024 QCN9074|Step by Step to load driver for DR9074-Triband on linux 5.17.0
    LoadingDR9074-TribandDriveronLinux5.17.0withATH11KSupportWallysrecentlyannouncedATH11KsupportforDR9074-TRIBANDonLinux,expandingitscompatibilitybeyondQualcommplatformstovariousLinuxembeddedsystems,includingUbuntu.Inthisartic......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......
  • 洛谷题单指南-暴力枚举-P1706 全排列问题
    原题链接:https://www.luogu.com.cn/problem/P1706题意解读:n个数全排列问题,本质上,给定n个空位,枚举每个能填入空位的数,依次填入,每个数只能填一次。解题思路:如何填入n个数呢,可以借助于递归,流程如下:dfs(填入第k个数){如果已经填满n个数输出结果返回......
  • 洛谷题单指南-暴力枚举-P1157 组合的输出
    原题链接:https://www.luogu.com.cn/problem/P1157题意解读:在1~n的数中挑选r个,有多少种组合,与P1036类似,有两种做法:二进制法、DFS,下面给出DFS版的代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,r;intt[N];voiddfs(intk){......
  • 洛谷题单指南-暴力枚举-P1036 [NOIP2002 普及组] 选数
    原题链接:https://www.luogu.com.cn/problem/P1036题意解读:题目即要在n个数中,枚举出所有的子集,当子集中数字个数刚好为k时,求和,判断是否是素数。解题思路:方法一:二进制法通过二进制法,可以枚举一个集合中所有元素“选”或者“不选”的情况,用二进制1表示选该元素,二进制0表示不选。......
  • 洛谷题单指南-暴力枚举-P1618 三连击(升级版)
    原题链接:https://www.luogu.com.cn/problem/P1618题意解读:枚举所有三位数的组合情况,判断是否符合比例。解题思路:方法一:枚举第一个数根据题意,目的是寻找三个符合比例的三位数,可以直接枚举第一个,最小是123,最大是987设第一个数为x,三个数的比例关系是a:b:c设另外两个数为y,z那么,根......
  • 洛谷题单指南-暴力枚举-P2241 统计方形(数据加强版)
    原题链接:https://www.luogu.com.cn/problem/P2241题意解读:要在整个n*m区域计算正方形和长方形的个数,枚举法即可。解题思路:此题枚举的对象是矩形的高i和宽j,高的范围[1,n],宽的范围[1,m],然后计算在n*m区域内有多少个i*j,i==j即属于正方形,i!=j属于长方形。那么,问题就集中在了......
  • 洛谷题单指南-排序-P1012 [NOIP1998 提高组] 拼数
    原题链接:https://www.luogu.com.cn/problem/P1012题意解读:通过某种合理的排序方式,使得排序后的数字连在一起最大。解题思路:此题关键在于排序,对于两个数字,哪个数字应该排在前面呢?1、思考误区很容易想到,给定两个数abcd、xyz,先比较第一位a和x,谁大谁排前面,一直到c和z。再来看d,这......
  • 洛谷题单指南-排序-P1104 生日
    原题链接:https://www.luogu.com.cn/problem/P1104题意解读:将学生按照年龄由大到小排序,如果年龄相同,后输入的排在前面,输出排序后的学生姓名。解题思路:此题是一个排序常规题,年龄大排在前说明年、月、日越小越在前面,核心的排序思路如下:1、如果年份不同,按年份由小到大排序2、如果......