首页 > 其他分享 >洛谷P3654 First Step题解

洛谷P3654 First Step题解

时间:2023-01-24 11:12:52浏览次数:40  
标签:洛谷 int 题解 线段 Step 放置 P3654 长度

这是一道暴力枚举。


 

大致题意:R行C列的棋盘要放下长度为K的线段,“#”表示无法放置,问有多少种放置方法。

直接贴代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string str;//读取字符串 
    int r,c,k,a[101][101],cnt=0;//数组a用来存储棋盘 
    cin>>r>>c>>k;//r表示行,c表示列,k表示线段长度 
    for(int i=1;i<=r;i++){
        cin>>str;//输入 
        for(int j=1;j<=c;j++){
            if(str[j-1]=='.')
            //将棋盘字符转为数值表示是否可以放置 
                a[i][j]=0;//0表示可以放置 
            else a[i][j]=1;//反之赋1不可放置 
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            if(a[i][j]==1||j+k-1>r)continue;
            //如果不可放置或无法容纳线段长度直接下一层循环 
            int flag=1;//标记是否有障碍物 
            if(a[i][j]==0){//可以放置 
                for(int l=j+1;l<j+k;l++){//枚举长度为k的线段 
                    if(a[i][l]==1){//从左往右枚举 
                        flag=0;//无法放置则标记为0 
                        break;//直接跳出循环 
                    }
                }
                if(flag==1)cnt++;//无障碍物,计数器+1 
            }
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            if(a[i][j]==1||i+k-1>c)continue;
            //如果不可放置或无法容纳线段长度直接下一层循环 
            int flag=1;//标记是否有障碍物  
            if(a[i][j]==0){//可以放置 
            for(int l=i+1;l<i+k;l++){//枚举长度为k的线段
                if(a[l][j]==1){//从上往下枚举 
                    flag=0;//无法放置则标记为0 
                    break;//直接跳出循环 
                }
            }
            if(flag==1)cnt++;// 无障碍物,计数器+1 
            }    
        }
    }
    if(k==1)cout<<cnt/2;
    //特判,如果线段长度为1,横向纵向会判断两次,除以2输出 
    else cout<<cnt;
    return 0;
}

 

标签:洛谷,int,题解,线段,Step,放置,P3654,长度
From: https://www.cnblogs.com/zhangqixun/p/17065940.html

相关文章

  • P4022 [CTSC2012]熟悉的文章 题解
    题目链接简要题意给定\(m\)个模板串和\(n\)个匹配串,如果一个字符串是一个模板串的子串且长度不小于\(L\)则称其为“熟悉的”,对于每个匹配串,求一个最大的\(L\),满足......
  • 程序员经典问题解答
    帮助在学习、上班的过程中,你是否经常遇到疑难问题无法解决,为此备受折磨?别担心,小编精选多道程序员最头痛的技术问题予以回答。QA小伙伴程序大牛C语言 Q:如何引用一个已经定义......
  • Solution 题解 UVA1389 Hard Life: 最小割,有向图,分数规划,和牛顿迭代
    题解UVA1389HardLife:最小割,有向图,分数规划,和牛顿迭代Preface黑题好耶看到了题解里面大多数是二分,我就来讲一讲简单又快速的DinkelbachAlgorithm吧!0-1分数规划......
  • 洛谷P2036 PERKET题解
     先来审题,主要有以下几个条件:酸度求乘积,苦度求和,两者相减的值最小(当然是绝对值)。下面附上AC代码:#include<bits/stdc++.h>//万能头文件usingnamespacestd;//......
  • 【题解】CF193D Two Segments
    题意给定一个\(1\simN\)的排列,在这个排列中选出两段互不重叠的区间,求使选出的元素排序后构成公差为1的等差数列的方案数。选出的两段区间中元素构成的集合相同时视为同一......
  • 【题解】P5787 二分图 /【模板】线段树分治
    概念线段树分治是一种用于维护时间轴等的离线算法,本质上是通过维护时间轴的连续区间得到某一时刻的状态。时间复杂度和普通线段树相同,空间复杂度为\(O(n\logn)\)例题......
  • Codeforces Round #845 (Div. 2) D题解
    D.ScoreofaTree题目链接:https://codeforces.com/contest/1777/problem/D个人感觉还是比较简单的一道计数题题意是给你一颗有n(n<=2e5)节点的树,初始时每个节点有一个......
  • 【题解】P4755 Beautiful Pair
    麻了,这么多典题没做过……思路分治/笛卡尔树。这一类和区间最值相关的区间端点对计数应该都可以用这种做法做。由于求的是最大值,不妨从大到小考虑每个\(a_i\)的贡......
  • 【题解】Codeforces Round #845 (Div. 2) and ByteRace 2023
    建议开题顺序:A->B->C->F->E->D诈骗差评,典题差评,想易写难数据结构差评。A.EverybodyLikesGoodArrays!好像是结论题,但是一力降十会。显然最后合并完后,每个......
  • P5030 题解
    前言题目传送门!更好的阅读体验?一道没啥意思的题目,但是好像很多题解都过不了现在的数据?思路只不过是把正常题目的马(\(1,2\))换成了另一种东西(\(1,3\))。很套路地,黑白......