【每日一题】【map和set】RC-v7 熊猫血 C++

news2024/9/17 9:27:51

2024 睿抗机器人开发者大赛CAIP-编程技能赛-高职组(省赛)

RC-v7 熊猫血

题目描述

在“一年一度喜剧大赛”上有一部作品《少爷和我》,讲的是霸道管家龙傲天和憨厚少爷刘波的故事。管家有着霸总文学主人公所有的毛病,包括会咳出熊猫血……

血型是指血液各成分的抗原在个体间出现的差异。人类血型有数十种类型或系统,庞大复杂,如果把所有分类组合都考虑在内,可以细分出非常多种血型。熊猫血是 Rh 阴性血的俗称,东方人 Rh 阴性血型

非常稀有,只占不到 0.5%。

本题给出一批熊猫血型的数据,请你帮前来查询的人查一下他们是否有熊猫血,最后统计一下他们中间的熊猫血占比是多少。

输入格式

输入首先给出一批熊猫血型的数据:在第一行给出不超过 1 0 4 10^4 104的正整数 N N N,随后 N N N行,每行给出一种熊猫血型的编号,由不超过 8 8 8个大写英文字母和数字组成。题目保证编号不重复。
随后是查询人的信息,首先是一个不超过 1 0 5 10^5 105的非负整数 M M M,随后 M M M行,每行给出一个人的血型编号,格式同上。

输出格式

在第一行中输出 M 个由 0 或 1 组成的串,其中第 i i i位对应第 i i i个查询者,如果是熊猫血则为 1,否则为 0。
第二行输出携带熊猫血者所占的百分比(意思是:有熊猫血的人数/查询总人数 × 100 \times 100 ×100),输出小数点后 2 位。
第三行输出被查询次数最多的那种熊猫血型的编号。题目保证输出存在唯一。

样例 #1

样例输入 #1

3
RH0ABP1
RH0APY
BPYORH0
9
BPYORH1
RH0ABP2
RH0APY
APYORH0
RH0OPY
BPYORH0
RH1APY
RH0APY
ABPYRH0

样例输出 #1

001001010
33.33
RH0APY

提示

代码长度限制 16 KB

Python (python3)
时间限制 400 ms
内存限制 256 MB

Java (javac)
时间限制 1000 ms
内存限制 256 MB

其他编译器
时间限制 200 ms
内存限制 64 MB
栈限制 8192 KB

做题要点

  1. 编号不重复
  2. 查一下他们是否有熊猫血
  3. 计一下他们中间的熊猫血占比是多少
  4. 1 ≤ N ≤ 1 0 4 1\le N \le 10^4 1N104 , 1 ≤ M ≤ 1 0 5 1\le M \le 10^5 1M105
  5. 除开Python和Java以外时间限制 200 ms

做题难点

如何优化代码,使得符合200ms的时间复杂度

仅用map去存储判断,会超时。
给出的正解是用set存储并用set中的count()函数去进行判断

做题思路

首先按照暴力的思路想题目是很简单的。

  1. 记录所有熊猫血的血型编号
  2. 每次输入查询人的信息血型编号就去之前的记录库里面查询一遍。如果查到了,对应熊猫血的血型编号记录个数+1并且记录一下串的第 i i i位为1;否则,记录一下串的第 i i i为为0
  3. 最后将有熊猫血的人数/查询总人数 × 100 \times 100 ×100的答案输出小数点后 2 位。

很显然如果用纯数组去存储熊猫血的血型编号,每次输入查询人的信息都去遍历查询,时间复杂度就会到 O ( n × m ) O(n\times m) O(n×m),百分百超时

问题就在于如何存储和查询更快,首先想到的就是树的数据结构。
在 C++ 标准模板库(STL)中
set底层数据结构是红黑树,查找效率和插入效率都是 O ( log ⁡ n ) O(\log n) O(logn),元素唯一
map底层数据结构是红黑树,查找效率和插入效率都是 O ( log ⁡ n ) O(\log n) O(logn),元素键是唯一,值不是唯一。

所以这道题就应该考虑用set或者map去实现存储和查询。

总思路

  1. 用set记录所有熊猫血的血型编号
  2. 每次输入查询人的信息血型编号就去之前的记录库里面查询一遍。如果查到了,对应熊猫血的血型编号记录个数(用map记录)+1并且输出1,并且有熊猫血的人数+1;否则,输出为0
  3. 最后将有熊猫血的人数/查询总人数 × 100 \times100 ×100的答案输出小数点后 2 位。

时间复杂度分析

set查找效率和插入效率都是 O ( log ⁡ n ) O(\log n) O(logn)
N N N次插入,有 M M M次查询,且最大值比较 N ≤ M N\le M NM
所以总时间复杂度为 O ( M log ⁡ N ) O(M\log N) O(MlogN)

伪代码

在这里插入图片描述

VJ赛时AC代码

优化优化还是 T M ^{TM} TM优化

#include <iostream>
#include <map>
#include <vector>
#include <set>
using namespace std;
const int N = 1e5+10;
int n,m,cnt,maxa;
map<string,int>ma;
map<string,int>mb;
map<int,string>bm;
//map<string,bool>flag;
set<string>flag;
bool a[N];
int ans;
string t;
int main(){
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> t;
        //flag[t] = true;
        flag.insert(t);
        mb[t] = i;
        bm[i] = t;
    }
    cin >> m;
    for(int i=1;i<=m;i++){
        cin >> t;
        if(flag.count(t)){
            ma[t] ++;
            if(maxa < ma[t]){
                maxa = ma[t];
                ans = mb[t];
            }
            printf("1");
            cnt++;
            continue;
        }
        printf("0");
    }
    cout << '\n';
    printf("%.2f\n",(double)cnt/(double)m*100);
    cout << bm[ans];
}

官方答案

#include <bits/stdc++.h>

using namespace std ;

int main()
{
    int n , m , cnt = 0 ;
    cin >> n ;
    set<string> st ;
    map<string,int> mp ;
    int c = 0 ;
    string res = "" , u = "" ;
    for(int i = 0 ; i < n ; i ++)
    {
        string s ;
        cin >> s ;
        st.insert(s) ;
    }
    
    cin >> m ;
    for(int i = 0 ; i < m ; i ++)
    {
        string s ;
        cin >> s ;
        if(st.count(s))
        {
            cnt ++ ;
            res += "1" ;
            mp[s] ++ ;
        }
        else res += "0" ;
    }
    for(auto [s,v] : mp)
        if(v > c)
        {
            c = v , u = s ;
        }
    cout << res << "\n" ;
    double x = cnt * 100.0 / (m * 1.0) ;
    printf("%.2lf\n",x) ;
    cout << u << "\n" ;
    return 0 ;
}

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

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

相关文章

服务运营 | NRL:疫苗供应链优化建模:综述与未来机遇(上)

编者按&#xff1a; 本次推文将解读近期发表在Naval Research Logistics中的Optimization modeling for pandemic vaccine supply chain management: A review and future research opportunities一文。这篇文章总结与反思了大流行时期的疫苗供应链管理&#xff0c;具体包括疫…

C#基于SkiaSharp实现印章管理(5)

印章中最常见的特殊形状通常是五角星&#xff0c;空心、实心的都可能存在&#xff0c;本文学习并实现在印章内部绘制五角星形状。   百度五角星的绘制方法&#xff0c;主要分为三种&#xff1a;   1&#xff09;五角星各点坐标固定&#xff0c;直接调用编程语言的绘制线条或…

线性结构、线性表、顺序表、链表、头插法、尾插法、中间插入或删除一个节点

梳理几个名词&#xff1a; 逻辑地址&#xff1a;就是说是第几个元素。 物理地址&#xff1a;也就是存储地址&#xff0c;在计算机里具体存放的位置。 线性表的存储结构分为&#xff1a; &#xff08;1&#xff09;顺序存储结构&#xff1a;将数据依次存储在连续的整块物理空…

综合项目部署——eleme前端部署(eighteen day)

显示没有空格没有注释的内容&#xff1a; [rootstatic-server ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf 1、多虚拟主机的配置 [rootstatic-server ~]# vim /usr/local/nginx/conf/nginx.conf [rootstatic-server ~]# /usr/local/nginx/sbin/nginx #启…

如何破解绩效管理的难题?

绩效管理的核心问题 &#x1f4bc; 在现代企业运营中&#xff0c;绩效管理一直被视为提升工作效率和实现公司战略目标的重要手段。然而&#xff0c;实际操作中&#xff0c;我们经常会遇到一系列棘手的问题&#xff0c;这些问题不仅影响了绩效管理的有效性&#xff0c;还常常让…

winform程序中拷贝文件夹最快速方法

1、先将一个项目的文件夹拷贝到另一个项目的目录下 下图将ParameterSetting文件夹拷贝到Datalib文件夹下 2、直接复制该文件&#xff0c;然后到vs界面去粘贴 复制ParameterSetting文件夹&#xff0c;然后在Datalib项目这里鼠标右键单击&#xff0c;然后点击“粘贴”&#xff0…

机器学习(五) -- 无监督学习(2) --降维2

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;2&#xff09; --降维1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被…

《动手做科研》06. 如何产生新的研究想法

地址链接:《动手做科研》06. 如何产生新的研究想法 欢迎加入我的知识星球&#xff0c;定期分享AI论文干货知识&#xff01; 导读: 提出好的研究想法是相当困难的&#xff0c;特别是当你刚接触一个领域时——这需要对文献中的空白有所了解。然而&#xff0c;产生研究想法的过程可…

数学建模--智能算法之模拟退火算法

目录 算法原理 应用场景 实现方法 代码示例&#xff1a; MATLAB&#xff1a; Python&#xff1a; 总结 模拟退火算法在数学建模中的具体应用案例有哪些&#xff1f; 如何选择模拟退火算法的参数&#xff08;如初始温度、冷却率等&#xff09;以优化求解过程&#xff1…

根据json构建uml类图代码工具实现

文章目录 1.UML简介1.1 什么是UML建模1.2 使用UML建模的好处 2.当前UML在研发场景下痛点3.UML工具的优化实现3.1 json结构设计3.2 json类图解析器实现3.3 在线uml类图渲染实现3.3.1 前端渲染页面3.3.2 后端数据接口 3.4 在线渲染效果 4. 总结 【摘要】本文介绍UML基本概念及相关…

Linux中安装C#的.net,创建运行后端或控制台项目

安装脚本命令&#xff1a; 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…

科普文:Spring Cloud Alibaba在GraalVM上的性能测试

GraalVM 介绍 GraalVM概述 - Spring Cloud Alibaba官网 科普文&#xff1a;GraalVM简介-CSDN博客 科普文&#xff1a;OpenJDK vs. GraalVM vs. Amazon Corretto性能测试-CSDN博客 科普文&#xff1a;【方向盘】OpenJDK生态圈-CSDN博客 科普文&#xff1a;Oracle JDK收费后…

【32单片机篇】项目:实时时钟

一、项目需求 1. OLED屏幕显示当前时间、日期、闹钟等信息&#xff1b; 2. 正常模式下&#xff0c;按下 KEY1 &#xff0c;进入时间设置模式&#xff0c;此时按下 KEY2 则可以循环跳转修改秒、分、时、日、月、年&#xff1b; 3. 时间设置模式下&#xff0c;KEY3 增加数值&…

【Redis】如何利用 Redis 实现一个分布式锁?

&#x1f44f;大家好&#xff01;我是和风coding&#xff0c;希望我的文章能给你带来帮助&#xff01; &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;点击 我的主页 还可以看到和风的其他内容噢&#x…

【优秀python算法设计】基于Python网络爬虫的今日头条新闻数据分析与热度预测模型构建的设计与实现

1 绪论 1.1 背景与意义 随着互联网的快速发展和移动互联技术的普及&#xff0c;作为新兴的资讯平台&#xff0c;今日头条成为了用户获取新闻资讯、时事热点和个性化推荐的重要渠道。大量用户在今日头条上浏览、阅读并产生热度&#xff0c;使得今日头条成为了观察舆论热点和分…

Csrf复习(pikachu靶场和防御手段)

CSRF漏洞简介 CSRF又称跨站请求伪造&#xff0c;是指攻击者在用户登录的状态下&#xff08;浏览器保存了用户的cookie&#xff09;通过伪造恶意url诱导用户点击&#xff0c;借助用户的cookie网站权限&#xff08;冒充用户身份来进行非法操作&#xff0c;对于服务器来说是合法的…

达梦数据库系列—36.分区表

目录 1、分区表的分类 1.1 范围分区表 1.2 List分区表 1.3 哈希分区表 1.4 多级分区表 二级分区 三级分区 2、分区表的维护 2.1 增加分区 2.2 删除分区 2.3 交换分区 2.4 融合分区 3、全局索引和局部索引 1、分区表的分类 范围(range)水平分区&#xff1a;对表中…

【LLM大模型】AI大模型大厂面试真题:「2024大厂大模型技术岗内部面试题+答案」

AI大模型岗的大厂门槛又降低了&#xff01;实在太缺人了&#xff0c;大模型岗位真的强烈建议各位多投提前批&#xff0c;▶️众所周知&#xff0c;2025届秋招提前批已经打响&#xff0c;&#x1f64b;在这里真心建议大家6月7月一定要多投提前批&#xff01; &#x1f4bb;我们…

【深度学习|目标跟踪】SSD+Sort实现MOT!

SSDSort实现目标跟踪 源码地址1、&#x1f64c;&#x1f3fb;匈牙利匹配算法1.1 什么是匈牙利匹配1.2 什么是二分图&#xff1a;1.3 最大匹配1.4 最优匹配1.5 最小点覆盖1.6 交替路1.7 增广路1.8 匈牙利匹配具体流程以及实例1.9 广度优先匹配1.10 深度优先匹配1.11 给匹配加权来…

SQL—数据库与表操作

目录 SQL语句分类 DDL 数据库操作 1. 查询所有数据库 2. 查询当前数据库 3. 创建数据库 案例&#xff1a;创建一个itcast数据库&#xff0c;使用数据库默认的字符集 案例&#xff1a;创建一个itheima数据库&#xff0c;并且指定字符集 4. 删除数据库 5. 切换数据库…