2024/1/17 DFS BFS + Div 3 a,b

news2024/12/24 8:38:48

目录

Lake Counting S

求细胞数量

海战 

组合的输出

div3 A. Square

div3 B. Arranging Cats


Lake Counting S

P1596 [USACO10OCT] Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

感谢大佬的指点!!!!

思路:用bfs,遇到w就进入bfs一次,把搜索到的w全部变成,然后ans++

最后答案输出(其实就是看进入了几次bfs)

中途re了一次,因为int bfs(int x,int y)没有写返回值,把int 改成void就行了

re的原因:越界或者递归没有出口

 

完整代码

#include <bits/stdc++.h>
const int N = 110;
char g[N][N];
bool vis[N][N]{};
int n,m,ans;
struct node
{
    int r,c;
};
int rr[10]={-1,1,0,0,-1,1,-1,1};
int cc[10]={0,0,-1,1,-1,-1,1,1};
void bfs(int x,int y)
{
    std::queue<node> q;
    q.push({x,y});
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_r=tmp.r,cur_c=tmp.c;
        for(int i = 0;i < 8;i ++)
        {
            int next_r=cur_r+rr[i];
            int next_c=cur_c+cc[i];
            if(next_r>=1&&next_r<=n&&next_c>=1&&next_c<=m&&vis[next_r][next_c]==false&&g[next_r][next_c]=='W')
            {
                q.push({next_r,next_c});
                g[next_r][next_c]='.';
                vis[next_r][next_c]=true;
            }
        }
    }
}
int main()
{
    std::cin >> n >> m;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            std::cin >> g[i][j];
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            if(g[i][j]=='W')
            {
                bfs(i,j);
                ans++;
            }
        }
    }
    std::cout<<ans<<"\n";
    return 0;
}

求细胞数量

P1451 求细胞数量 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题和前面那一道是同一个类型的,搜索的方向又八个减少到了四个,思路也差不多,遇到数字细胞就进入一次bfs,,把上下左右的数字细胞全部置为零,然后ans++,最后输出答案

完整代码

#include <bits/stdc++.h>
const int N = 110;
int g[N][N];
bool vis[N][N]{};
int rr[4]={-1,1,0,0};
int cc[4]={0,0,-1,1};
int n,m,ans;
struct node
{
    int r,c;
};
void bfs(int x,int y)
{
    std::queue<node> q;
    q.push({x,y});
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_r=tmp.r,cur_c=tmp.c;
        for(int i = 0;i < 4;i ++)
        {
            int next_r=cur_r+rr[i];
            int next_c=cur_c+cc[i];
            if(next_r>=1&&next_r<=n&&next_c>=1&&next_c<=m&&g[next_r][next_c]!=0&&vis[next_r][next_c]==false)
            {
                q.push({next_r,next_c});
                vis[next_r][next_c]=true;
                g[next_r][next_c]=0;
            }
        }
    }
}
int main()
{
    std::cin >> n >> m;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            scanf("%1d",&g[i][j]);
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            if(g[i][j]>=1&&g[i][j]<=9)
            {
                bfs(i,j);
                ans++;
            }
        }
    }
    std::cout<<ans<<"\n";
    return 0;
}

海战 

P1331 海战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题和上面两个大体相似,只是多了一个判断,用的算法还是bfs

当船是这样的时候,就会发生碰撞

先进行一个判断,如果发生碰撞就输出Bad placement.然后直接结束return(注意在判断的时候不要越界,循环里面的num要及时清空,不然一直会累加)

如果没有发生碰撞,就进入bfs进行搜索看一共有几艘船

完整代码

 

#include <bits/stdc++.h>
const int N = 1010;
struct node
{
    int r,c;
};
int rr[4]={-1,1,0,0};
int cc[4]={0,0,-1,1};
char g[N][N];
bool vis[N][N]{};
int n,m,ans;
int num;
void bfs(int x,int y)
{
    std::queue<node> q;
    q.push({x,y});
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_r=tmp.r,cur_c=tmp.c;
        int j=0;
        for(int i = 0;i < 4;i ++)
        {
            int next_r=cur_r+rr[i];
            int next_c=cur_c+cc[i];
            if(next_r>=1&&next_r<=n&&next_c>=1&&next_c<=m&&g[next_r][next_c]=='#'&&vis[next_r][next_c]==false)
            {
                q.push({next_r,next_c});
                g[next_r][next_c]='.';
                vis[next_r][next_c]=true;
                j++;
            }
        }
    }
}
int main()
{
    std::cin >> n >> m;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            std::cin >> g[i][j];
        }
    }
    for(int i = 1;i < n;i ++)
    {
        for(int j = 1;j < m;j ++)
        {
            if(g[i][j]=='#')
                num++;
            if(g[i][j+1]=='#')
                num++;
            if(g[i+1][j]=='#')
                num++;
            if(g[i+1][j+1]=='#')
                num++;
            if(num==3)
            {
                printf("Bad placement.");
                return 0;
            }
            num=0;
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            if(g[i][j]=='#')
            {
                bfs(i,j);
                ans++;
            }
        }
    }

    printf("There are %d ships.",ans);
    return 0;
}

 

组合的输出

P1157 组合的输出 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题使用dfs,就是全排列的变形,但是核心代码那里可以精简很多

完整代码

#include <bits/stdc++.h>
const int N = 110;
int n,m;
//int state[N];
int path[N];//存数
void dfs(int u)
{
    if(u>m)
    {
        for(int i = 1;i <= m;i ++)
        {
            std::cout<<std::setw(3)<<path[i];//场宽为3
        }
        std::cout<<"\n";
    }
    else
    {
        for(int i = path[u-1]+1;i <= n;i ++)
        {
            path[u]=i;
            dfs(u+1);
        }
    }
}
int main()
{
    std::cin >> n >> m;
    dfs(1);
    return 0;
}

div3 A. Square

Problem - A - Codeforces

方法:暴力

完整代码

#include <bits/stdc++.h>
#define int long long
const int N = 10086;
int x[N];
int y[N];
signed main()
{
    int t;
    std::cin >> t;
    while(t --)
    {
        int maxx=-999999,minx=999999,maxy=-9999999,miny=9999999;
        for(int i = 1;i <= 4;i ++)
        {
            std::cin >> x[i] >> y[i];
            maxx=std::max(maxx,x[i]);
            minx=std::min(minx,x[i]);
            maxy=std::max(maxy,y[i]);
            miny=std::min(miny,y[i]);
        }
        int ans=(maxx-minx)*(maxy-miny);
        std::cout<<ans<<"\n";
    }
    return 0;
}

div3 B. Arranging Cats

Problem - B - Codeforces

这道题其实就是输出 需要移动的1+需要删除的1    

两个变量a1,b1,用来记录出现的不相同的位置的1,

两排字符串作比较,如果不相同,那么在字符串为1对应的变量那里++(如果是第一排有1,那么a1++,如果第二排有1,那么b1++)

完整代码

#include <bits/stdc++.h>
#define int long long
const int N = 1e5+10;
int a[N],b[N];
int a1,b1;
int mov1;
int delete1;
signed main()
{
    int t;
    std::cin >> t;
    while(t --)
    {
        int n;
        std::cin >> n;
        for(int i = 1;i <= n;i ++)
        {
            scanf("%1d",&a[i]);
        }
        for(int i = 1;i <= n;i ++)
        {
            scanf("%1d",&b[i]);
        }
        for(int i = 1;i <= n;i ++)
        {
            if(a[i]!=b[i])
            {
                if(a[i]==1)
                    a1++;
                else if(b[i]==1)
                    b1++;
            }
        }
        mov1=std::min(a1,b1);
        delete1=std::abs(a1-b1);
        std::cout<<mov1+delete1<<"\n";
        a1=0,b1=0;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s使用ingress实现应用的灰度发布升级

v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx&#xff0c;来测试灰度发布实现过程 一、方案&#xff1a;使用ingress实现应用的灰度发布 1、服务端&#xff1a;正常版本v1&#xff0c;灰度升级版本v2 2、客户端&#xff1a;带有请求头versionv2标识的请求访问版…

老套的购物车效果

一、项目文件结构 二、各个文件内容 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport…

【C语言进阶】预处理详解

引言 对预处理的相关知识进行详细的介绍 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 预定义符号 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 …

算法基础学习|双指针算法

双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类&#xff1a;(1) 对于一个序列&#xff0c;用两个指针维护一段区间(2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并…

echarts绘制饼图,部分数据隐藏指示线和文本,hover时隐藏指示线和文本的类别也不显示tooltip提示

option {tooltip: {trigger: item,formatter: (p) > {if (p.name) {return ${p.name}&#xff1a;${p.value}个;}},backgroundColor: #ffffff,textStyle: { color: #666666 } // 提示标签字体颜色},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,…

第三方控价服务商怎么选

用对了方法&#xff0c;事半功倍&#xff0c;品牌控价也是如此&#xff0c;品牌方在治理工作中&#xff0c;如果选择自建团队进行处理&#xff0c;需要包含对数据技术的抓取团队&#xff0c;还要有对治理规则熟悉的操作团队&#xff0c;涉及人员和系统&#xff0c;费用成本相应…

TA百人计划学习笔记 3.1.1模板测试

资料 源视频 【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例_哔哩哔哩_bilibili ppt 3100-模板测试与深度测试(1) 参考 Unity Shader: 理解Stencil buffer并将它用于一些实战案例&#xff08;描边&#xff0c;多边形填充&#xff0c;反射区域限定&#xff0c;阴影…

EXECL 单元格字符串链接 CONCAT :应用:将一行数据转为json

源&#xff1a; 目标 函数表示 CONCAT("data", CHAR(10), "{", CHAR(10), " ", "ulAlarmId : ", A5, CHAR(10), " ", "ulAlarmLevel : ", D5, CHAR(10)," ", "bBo…

远程桌面--虚拟机与主机的文件传输

注意&#xff1a; 确保VMware开头的服务全部在运行进入虚拟机打开文件管理器点击计算机右键选择属性在选择远程管理选择允许 1.winR 输入mstsc 2.输入虚拟机的ip地址 2.输入虚拟机的密码 上面的Administrator是虚拟机的用户名&#xff0c;有时会需要我们手动输入 3.验证…

【华为 ICT HCIA eNSP 习题汇总】——题目集7

1、一台 PC 的 MAC 地址是 5489-98FB-65D8 &#xff0c;管理员希望该 PC 从 DHCP 服务器获得指定的 IP 地址为192.168.1.11/24&#xff0c;以下命令配置正确的是&#xff08;&#xff09;。 A、dhcp static-bind ip-address 192.168.1.11 24 mac- address 5489-98FB-65D8 B、dh…

java(渣哇)------输入与输出语句(详解) (๑•̌.•๑)

目录 一.java的输出语句&#xff1a; System.out.println() -----输出并换行 System.out.print() -----输出但不换行 System.out.printf() -----类似C语言的printf()输出语句,按格式进行输出 二.java的输入语句&#xff1a; 2.1-----Scanner的基础用法&#xff1a; 2.2…

【江科大】STM32:外部中断(Extern Interrupt)

文章目录 EXTI&#xff08;Extern Interrupt&#xff09;外部中断EXIT的基本结构EXIT框图 旋转编码器简介库函数&#xff1a;对射式红外传感器计次&#xff1a;代码展示&#xff1a;旋转编码器计次注意&#xff1a; EXTI&#xff08;Extern Interrupt&#xff09;外部中断 功能…

vue2中CesiumV1.113.0加载离线地形数据

离线地形数据可以放在vue项目下的public/data/sjzTerrain文件下 由于地形离线数据数量太大&#xff0c;在vue项目编译时会报如下错误&#xff1a; ERROR in EMFILE: too many open files, open D:\test_project\vue_cesium_demo\public\data\sjzTerrain\.tmp\14\26787\11669.h…

macos pip3 install pycryptodome导入from Crypto.Cipher import AES报错

问题&#xff1a; 已经使用pip3 install pycryptodome安装成功了&#xff0c;但是导入from Crypto.Cipher import AES还是提示Unresolved reference Crypto 原因&#xff1a; 一句话&#xff1a;安装文件大小写问题&#xff08;这只是我遇到的一种情况&#xff09;。 修改&am…

牛客周赛 Round 18 解题报告 | 珂学家 | 分类讨论计数 + 状态DP

前言 整体评价 前三题蛮简单的&#xff0c;T4是一个带状态的DP&#xff0c;这题如果用背包思路去解&#xff0c;不知道如何搞&#xff0c;感觉有点头痛。所以最后还是选择状态DP来求解。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 游游的整数翻转 这题最好…

03.Elasticsearch应用(三)

Elasticsearch应用&#xff08;三&#xff09; 1.核心概念介绍 注意&#xff1a;类型&#xff08;Type&#xff09; 6.0之前的版本有Type概念&#xff0c;type相当于关系型数据库的表&#xff0c;ES官方将在ES9版本中彻底删除Type。7里面Type为ES默认的类型_doc 2.Cat API 介…

面试经典 150 题 - 多数元素

多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1…

Ubutu下的Shell操作

前言 在学习Ubuntu系统时&#xff0c;Shell操作是必不可少的知识。本篇文章是记录我学习Linux系统时&#xff0c;Ubutu下的Shell操作&#xff0c;希望我的分享对大家有所帮助&#xff01; 目录 前言 一、什么时是Shell 二、Shell的基本操作 三、常用的Shell命令 1、目录信…

C++提高编程——STL:string容器、vector容器

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

机器学习:什么是监督学习和无监督学习

目录 一、监督学习 &#xff08;一&#xff09;回归 &#xff08;二&#xff09;分类 二、无监督学习 聚类 一、监督学习 介绍&#xff1a;监督学习是指学习输入到输出&#xff08;x->y&#xff09;映射的机器学习算法&#xff0c;监督即理解为&#xff1a;已知正确答案…