[NOI Online #3 入门组] 最急救助

news2024/11/19 8:49:28

题目描述:

救助中心每天都要收到很多求救信号。收到求救信号后,救助中心会分析求救信号,找出最紧急的求救者给予救助。

求救信号是一个由小写英文字母组成的字符串,字符串中连续三个字符依次组成sos的情况越多(即包含子串sos的数目越多),代表着求救者情况越紧急。

现在请你帮助救助中心找出最紧急的求救者。注意字符串中包含的sos可以有重叠,例如sosos算作包含 2 个sos

输入格式:

从标准输入读入数据。

第一行一个整数 n,表示求救者的数目。

接下来有 2×n 行,每行一个由小写英文字母组成的字符串。这 2×n 行中,第 2×i−1(1≤i≤n)行的字符串表示第 i 个求救者的名字,第 2×i 行的字符串表示第 i 个求救者的求救信号。

输出格式:

输出到标准输出。

输出共两行,第一行是最紧急求救者的名字。如果最紧急求救者有多个,则按照输入的顺序将他们的名字依次输出,相邻两个名字间用空格分隔。

第二行一个整数,表示最紧急求救者的求救信号中包含有多少个sos子串。

输入输出样例:

输入 #1:

2
adam
ineedhelpsosineedhelpsos
mark
ineedmorehelpsoshelpmesossoshelpme

输出 #1:

mark
3

输入 #2:

3
susan
sosososososos
jack
sossossossos
allen
soshelpsossossossossos

输出 #2:

susan allen
6

说明/提示:

数据规模与约定:

  • 对于 10% 的数据,n=1。
  • 对于所有数据,1≤n≤100,求救者名字长度不超过 20,求救信号长度不超过 200。

思路:

题目大意就是给你一堆字符串,然后让你找出哪个字符串中包含的子串 sos 最多。

所以,我们要做的事情有:

  1. 在一个字符串中寻找子串 sos 的数量;
  2. 以子串 sos 的数量为第一优先级,输入顺序为第二优先级排序;
  3. 输出所有子串 sos 最多的字符串。

接下来,让我们一步一步K掉这道题吧!

  1.前置:存储每个人的信息

这里定义一个结构体即可,里面的变量就是每一个求救者的基本信息。(这个是最后用来排序的)

struct node{
    string name,help;
    int s,num;
    //name 是求助者的名字
    //help 是求助者的求助信息
    //s 是求助信息中子串 sos 的数量
    //num 是求助者的顺序
}str[105];

  2.第一步:

  接下来我们需要在一个字符串中寻找子串 sos 的数量,这部分是最简单的,直接从头到尾暴力枚举即可(直接加在结构体里面的s即可,可以写一个函数来进行解决)。

int find(string qwq){                   //寻找子串 sos 的数量
    int len=qwq.size();                 //提取出这个字符串的长度,STL 大法好!QwQ
    int anss=0;                         //子串 sos 的数量
    for(int i=0;i<len-2;i++){           //从头到尾枚举
        if(qwq[i]=='s'&&qwq[i+1]=='o'&&qwq[i+2]=='s'){  //如果这里有一个 sos
            anss++;                     //子串 sos 的数量+1
        }
    }
    return anss;                        //返回子串 sos 的数量
}

  3.第二步:

  我们就是要开始排序了,以子串 sos 的数量为第一优先级,输入顺序为第二优先级排序(这是题目要求的,如果数量相等,按照输入顺序输出);

  这里也可以利用 STL 中的 sort 函数,手写一个 cmp 比较函数即可。

  首先是比较函数 cmp :

bool cmp(node p,node q){                //比较函数 cmp
    if(p.s==q.s){                       //如果两个求助信息中的子串 sos 的数量都相同
        return p.num<q.num;             //按照输入顺序排序
    }
    return p.s>q.s;                     //否则按照求助信息中的子串 sos 的数量排序
}

然后,排序部分只有一行:

sort(str+1,str+n+1,cmp);            //STL 大法好!QWQ

第三步:

  接下来最后一步,就是输出了!

为了确保输出每一个子串 sos 最多的字符串,我们可以定义变量 tmp 来表示子串 sos 最多有多少个,然后一个一个输出。

一旦出现子串 sos 少于 tmp 的情况,立刻退出循环,停止输出(因为我们找的是最紧急求救者)。

最后,输出 tmp 。(因为题目中还说让输出最紧急求救者的求救信号中包含有多少个 sos 子串)

int tmp=str[1].s;                   //排序之后,最前面的那个自然就是子串 sos 最多的啦QwQ,直接记录即可。
for(int i=1;i<=n;i++){
    if(str[i].s!=tmp){              //如果子串 sos 的数量少于 tmp
        break;                      //立刻退出循环停止输出
    }
    cout<<str[i].name<<" ";
}
cout<<endl<<tmp;                    //别忘了换行哦

完整代码:

#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
    string name,help;
    int s,num;
    //name 是求助者的名字
    //help 是求助者的求助信息
    //s 是求助信息中子串 sos 的数量
    //num 是求助者的顺序
}str[105];
int find(string qwq){                   //寻找子串 sos 的数量
    int len=qwq.size();                 //提取出这个字符串的长度,STL 大法好!QwQ
    int anss=0;                         //子串 sos 的数量
    for(int i=0;i<len-2;i++){           //从头到尾枚举
        if(qwq[i]=='s'&&qwq[i+1]=='o'&&qwq[i+2]=='s'){  //如果这里有一个 sos
            anss++;                     //子串 sos 的数量+1
        }
    }
    return anss;                        //返回子串 sos 的数量
}
bool cmp(node p,node q){                //比较函数 cmp
    if(p.s==q.s){                       //如果两个求助信息中的子串 sos 的数量都相同
        return p.num<q.num;             //按照输入顺序排序
    }
    return p.s>q.s;                     //否则按照求助信息中的子串 sos 的数量排序
}
int main(){
    //freopen("save.in","r",stdin);
    //freopen("save.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);                        //黑科技cin,cout加速
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>str[i].name>>str[i].help;
        str[i].s=find(str[i].help);     
        str[i].num=i;
    }
    sort(str+1,str+n+1,cmp);            //STL 大法好!QWQ
    int tmp=str[1].s;                   //排序之后,最前面的那个自然就是子串 sos 最多的啦QwQ,直接记录即可。
    for(int i=1;i<=n;i++){
        if(str[i].s!=tmp){              //如果子串 sos 的数量少于 tmp
            break;                      //立刻退出循环停止输出
        }
        cout<<str[i].name<<" ";
    }
    cout<<endl<<tmp;                    //别忘了换行哦
    return 0;
}

总结:

  这道题作为NOI Online的模拟赛的第三题,也就是最后一题,属实是太水了,我们只需要掌握结构体的运用,计数,sort排序比较函数,排序优先级就可以了,连一些算法都不必要用出来。

题目链接:


[NOI Online #3 入门组] 最急救助 - 洛谷https://www.luogu.com.cn/problem/P6565

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

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

相关文章

【蓝桥杯单片机】工厂灯光控制系统案例解析(小蜜蜂老师基础综合实训)

工厂灯光控制系统案例解析题目流程图关键点复盘参考代码&#xff08;IO模式&#xff09;题目 流程图 关键点复盘 设备检测——移位 L1~L8在板子上是从左至右&#xff0c;但是在对P0口赋值时是16进制从高位(L8)—>低位(L0) 根据原理图&#xff0c;LED赋值0亮1灭 为了方便赋值…

OpenShift 4 - 在单节点的 OpenShift 上用 NFS Operator 实现以 RWX 访问存储

《OpenShift / RHEL / DevSecOps 汇总目录》 文本已在 OpenShift Local 4.12 环境中进行验证。 文章目录OpenShift 支持的存储访问模式用 NFS Provisioner Operator 实现 RWX 访问存储安装 NFS Operator解决安装 Operator 过程无法访问谷歌 gcr.io 上的容器镜像配置 NFSProvisi…

《零基础学机器学习》读书笔记三之基本机器学习术语

《零基础学机器学习》读书笔记三之基本机器学习术语 一、机器学习快速上手路径&#xff08;续&#xff09; 1.3 基本机器学习术语 1.3.1 特征 特征是机器学习中的输入&#xff0c;原始的特征描述了数据的属性。特征的维度指的是特征的数目。 把向量、矩阵和其他张量的维度统…

React脚手架应用(二)

1、react脚手架 脚手架简介 用来帮助程序员快速创建一个基于xxx库的模板项目 1、包含了所有需要的配置&#xff08;语法检查、jsx编译、devServer…&#xff09;&#xff1b; 2、下载好了所有相关的依赖&#xff1b; 3、可以直接运行一个简单效果&#xff1b; create-react-a…

加速企业数字化进展,小程序容器来帮忙

近年来&#xff0c;由于新冠疫情&#xff0c;诸多企业面临经济挑战&#xff0c;高效办公常常无法正常保证。在此期间&#xff0c;不少企业纷纷加快了数字化进展。 2021年&#xff0c;在Gartner新型技术成熟度曲线中我们看到&#xff1a;组装式应用、实时事件中心即服务、生成式…

软考高级系统架构师背诵要点---系统安全与系统可靠性分析

系统安全与系统可靠性分析 系统安全&#xff1a; 信息摘要、数字签名、数字信封 被动攻击&#xff1a;收集信息为主&#xff0c;破坏保密性 窃听&#xff1a;用各种可能的合法手段和非法手段窃取系统中的信息资源和敏感信 业务流分析&#xff1a;通过对系统进行长期的监听&a…

Spark08: Spark Job的三种提交模式

一、三种任务提交方式 1. 第一种&#xff0c;standalone模式 基于Spark自己的standalone集群。指定–master spark://bigdata01:7077 2. 第二种&#xff0c;是基于YARN的client模式。 指定–master yarn --deploy-mode client 使用场景&#xff1a;这种方式主要用于测试&am…

Homekit智能家居DIY-智能通断开关

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…

自定义archetype脚手架完整步骤与异常情况处理方案

自定义archetype脚手架完整步骤与异常情况处理方案一、创建模板项目二、生成骨架jar包三、骨架安装到本地仓库如果出现安装位置错误的情况&#xff0c;参考以下场景处理&#xff1a;四、选择骨架&#xff0c;创建新项目创建项目时&#xff0c;如果一直卡在Generating project i…

Java集合(七)LinkedHashSet

LinkedHashSet的全面说明&#xff1a; &#xff08;1&#xff09;LinkedHashSet是HashSet的子类 &#xff08;2&#xff09;LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组双向链表 HashSet为数组单向链表 &#xff08;3&#xff09;LinkedHashSet根据元素的has…

Redis基础篇:Redis常见命令与数据结构

文章整理自B站黑马视频课程第一章&#xff1a;Redis数据结构介绍一&#xff1a;五种常见基本类型二&#xff1a;三种不常见类型第二章&#xff1a;数据类型的使用一&#xff1a;Redis通用命令二&#xff1a;String类型1&#xff1a;String常见命令2&#xff1a;String常见命令实…

任务系统的程序设计

任务是程序应用中常见的系统&#xff0c;它有助于用户代入角色&#xff0c;也有助于研发、运营和用户的互动&#xff0c;通常完成任务之后会给予用户一定的奖励。1&#xff0c;基本数据结构早期的任务系统设计的都很简单&#xff0c;大部分都是线性结构&#xff0c;偶尔会有环任…

负载均衡-

常见的负载均衡系统包括 3 种&#xff1a;DNS 负载均衡、硬件负载均衡和软件负载均衡。 DNS 负载均衡 DNS 是最简单也是最常见的负载均衡方式&#xff0c;一般用来实现地理级别的均衡。例如&#xff0c;北方的用户访问北京的机房&#xff0c;南方的用户访问深圳的机房。DNS 负…

【FreeRTOS】详细讲解FreeRTOS中事件(event)并通过具体示例讲述其用法

文章目录事件函数解析示例事件 事件&#xff0c;实际上是一种任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;其只能是事件类型的通信&#xff0c;无数据传输。与信号量不同的是&#xff0c;它可以实现一对多&#xff0c;多对多的同步。即可以是任意一个事…

为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} }) 组件中定义data属性&#x…

MACD二次金叉选股公式,零轴上下、一次三次金叉举一反三

本文介绍了MACD二次金叉选股公式编写思路&#xff0c;以MACD零轴之下二次金叉为例&#xff0c;编写选股公式&#xff0c;进行信号过滤&#xff0c;并把选股公式改编为技术指标。此外举一反三&#xff0c;介绍了三次金叉以及MACD零轴上二次金叉。 一、MACD二次金叉选股公式编写 …

ECharts线性渐变色示例演示

第003个点击查看专栏目录Echarts的渐变色采用了echarts.graphic.LinearGradient的方法&#xff0c;可以根据代码中的内容来看如何使用。线性渐变&#xff0c;多用于折线柱形图&#xff0c;前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1&#xff0c;相当于在图形包围盒中的百分…

计算机图形学 第10章 真实感图形

目录 学习目标 前情提要 # RGB颜色模型 HSV颜色模型 CMYK颜色模型/印刷颜色模型 简单光照模型&#xff08;考&#xff09;⭐⭐⭐ 简单光照模型假定&#xff1a; 材质属性 环境光模型 漫反射光模型 镜面反射光模型 Phong反射模型: 光强衰减 增加颜色 光滑着色 直线段的…

CentOS 7.9安装zabbix6.0LTS版本

环境说明 这里使用为 CentOS 7.9版本进行测试验证&#xff0c;zabbix Server 采用源码包部署&#xff0c;数据库采用 MySQL8.0版本&#xff0c;zabbix-web使用 &#xff0c;nginxphp来实现。 具体信息如下&#xff1a; 软件名版本zabbix-server6.0.12LTSzabbix-agent6.0.12LT…

MySQL数据库的常见考点

文章目录1、ACID事务原理事务持久性事务原子性MVCC基本概念MVCC基本原理undo logundo log版本链readviewMVCC实现原理RC读已提交RR可重复读MVCC实现原理总结2、并发事务引发的问题3、事务隔离级别4、索引4.1、索引概述4.2、索引优缺点4.3、索引结构二叉树B-Tree树BTree树BTree优…