AcWing 103. 电影(map、pair连用or离散化)

题目

方法一(map+pair)

 其实上面这么长巴拉巴拉就是在说

首先,每个科学家会的语言都不同。但是呢每部电影的字幕和语言是不一样的(字幕和语言一定不相同)

要求找到一部电影使得在场能听懂的科学家最多(如果存在两部及以上的电影的语言听懂人数相同的话,再去查找更多能看懂字幕的那部电影)

     思路分析

                1、使用map容器来存储科学家们听的懂的语言。
                2、使用pair(或者结构体)来存储科学家们能听得懂的语言和看的懂的字幕。
                3、然后先查找哪部电影最多科学家能听懂。
                4、接着再判断是否需要再查找哪部电影最多科学家能够看懂。

      ACcode

#include<iostream>
#include<cstring>
#include<algorithm>
#include<utility>
#include<map>
using namespace std;const int maxn = 200010;#define c_a first	//记录第i部电影的语音采用的编号
#define c_b second	 //记录第i部电影的字幕采用的编号
#define pii pair<int, int>	//存储某部电影所采用的语音编号和字幕编号map<int, int>c;	  //记录科学家听得懂的某种语言出现的次数
pii p[maxn];int a[maxn];	//记录第i个科学家懂得的语言int main() {int n, m;std::ios::sync_with_stdio(false);	//消除输入输出缓存std::cin.tie(0);	//解除cin与cout的绑定,加快速率。cin >> n;for (int i = 0; i < n; i++) {cin >> a[i];c[a[i]]++;}cin >> m;for (int i = 0; i < m; i++) {cin >> p[i].c_a;}for (int i = 0; i < m; i++) {cin >> p[i].c_b;}//优先选择听懂电影语音的int max_a = 0, idx = 0;//max_a表示听得懂的语言最多的数目//idx用于记录电影编号for (int i = 0; i < m; i++) {if (max_a < c[p[i].c_a]) {max_a = c[p[i].c_a];idx = i;}}int max_b = 0;//max_b表示看得懂字幕最多的数目for (int i = 0; i < m; i++) {if (max_a == c[p[i].c_a]) {if (max_b < c[p[i].c_b]) {max_b = c[p[i].c_b];idx = i;}}}cout << idx + 1;	//因为上述程序是由0开始遍历,故加1return 0;
}

方法二 (离散化)

 来源于AcWing大佬的想法    大佬解题思路加源代码

     思路分析

                1、将不通序列中的所有可能都映射到一个数组中。
                2、然后利用该数组进行排序和去重。
                3、再然后再利用一些二分查找去计数就欧了。

     ACcode

#include<iostream>
#include<algorithm>
using namespace std;const int maxn = 200010;
int lang[3 * maxn], uni[3 * maxn];
int a[maxn], b[maxn], c[maxn];
int ans[3 * maxn];int idx = 0, tot = 0;//find作用是把稀疏编号转为稠密编号
int find(int x) {return lower_bound(uni + 1, uni + 1 + idx, x) - uni;
}
int main() {int n, m;cin >> n;for (int i = 1; i <= n; i++) {	//科学家会的语言cin >> a[i];lang[++tot] = a[i];}cin >> m;for (int i = 1; i <= m; i++) {	//电影音频的语言cin >> b[i];lang[++tot] = b[i];}for (int i = 1; i <= m; i++) {	//电影字幕的语言cin >> c[i];lang[++tot] = c[i];}//排序lang,为了后续中的去重复操作sort(lang + 1, lang + 1 + tot);//把lang数组去重复,保存到uni数组for (int i = 1; i <= tot; i++) {if (i == 1 || lang[i] != lang[i - 1]) {uni[++idx] = lang[i];}}//用find转变成稠密编号,并用ans数组记录每种语言出现的次数。for (int i = 1; i <= n; i++) ans[find(a[i])]++;//遍历所有电影,按要求找到最多科学家会的电影int ans0, ans1, ans2;//ans0保存最终结果,ans1和ans2为中间结果ans0 = ans1 = ans2 = 0;for (int i = 1; i <= m; i++) {//算出第i个电影音频语言的科学家数,和第i个字幕语言的科学家数int anx = ans[find(b[i])], any = ans[find(c[i])];//如果ans大于ans1或者前者相等且any大于ans2时,更新if (anx > ans1 || (anx == ans1 && any > ans2)) {ans0 = i, ans1 = anx, ans2 = any;}}//如果所有的电影的声音和字幕的语言,科学家们都不懂,随便选一个if (ans0 == 0) {printf("%d\n", 1);}else {printf("%d\n", ans0);}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆剑苍穹2_唯美仙侠手游3D剑舞乾坤手游_WIN学习手工端_无IP数限制_通用视频教程_安卓_GM物品充值后台

逆剑苍穹2_唯美仙侠手游3D剑舞乾坤手游_WIN学习手工端_无IP数限制_通用视频教程_安卓_GM物品充值后台 源码内置视频和文档搭建教程感兴趣可自行下载学习

5.2 Android BCC环境搭建(adeb版,下)更新中

五&#xff0c;运行adeb shell adeb shell 六&#xff0c;其他指令 6.1 从开发机移除adeb adeb remove 6.2 更新开发机adeb deb git-pull 6.3 使用ssh替代adeb进行与android设备的通信 adeb --ssh <uri> --sshpass <pass> <cmd> 七&#xff0c;BCC配置…

图文详解:CRM系统的功能有哪些?

在如今多数行业市场充分竞争的情况下&#xff0c;同质化产品层出不穷&#xff0c;什么样的企业可以在市场中屹立不倒&#xff1f;必然是拥有广泛稳定的客户群体的企业&#xff0c;所以强大的客户关系管理能力就成为了企业的核心竞争力。 在SaaS发展到今日&#xff0c;基于云服…

Ribbon学习思维导图

参考资料 1、OpenFeign与Ribbon源码分析总结与面试题 2、万字剖析OpenFeign整合Ribbon实现负载均衡的原理 3、扒一扒Nacos、OpenFeign、Ribbon、loadbalancer组件协调工作的原理 4、OpenFeign原来是这么基于Ribbon来实现负载均衡的

快手在线查权重源码,附带查询接口

源码介绍 新增了用户访问 IP 和时间的统计功能。要使用此功能&#xff0c;只需将“bygoukai.sql”数据库导入源码中&#xff0c;然后修改“config.php”文件中的数据库用户名、密码和数据库名即可。如果需要修改水印&#xff0c;可以在第40行进行更改。要修改查询限制&#xf…

【算法练习】leetcode算法题合集之二叉树篇

递归遍历基础篇 前序遍历&#xff0c;中序遍历&#xff0c;后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归&#xff0c;递归需要知道终止条件。 前序遍历&#xff08;中左右&#xff09; 144.二叉树的前序遍历 中左右&#xff0c;先处理根节点&#xff0c;…

前端 -- 基础 综合案例 一 圣诞老人网页的静态实现

目录 主要涉及 &#xff1a; 目录文件夹 &#xff1a; 先新建目录文件夹 标签的使用 &#xff1a; 外部链接 &#xff1a; 锚点链接 &#xff1a; 内部链接 &#xff1a; 主要涉及 &#xff1a; # 目录文件夹的创建 # 标签的使用 &#xff08;标题 换行 段落 图像…

小米4A千兆版路由器刷入OpenWRT教程结合内网穿透远程访问

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

腾讯云TDSQL TCA/TCP/TCE 认证考试有什么区别呢?

腾讯云认证等级&#xff1a;专项认证考试&云方向认证考试 一、专项认证考试 数据库交付运维-腾讯云TDSQL认证考试一共分为三个等级&#xff1a; 初级TCA、高级工程师TCP、专家级TCE 1、TDSQL TCA培训(MySQL版/PostgreSQL版)考试安排 TCA考试是纯理论题&#xff0c;总分是…

springmvc内嵌tomcat、tomcat整合springmvc、自研国产web中间件

springmvc内嵌tomcat、tomcat整合springmvc、自研国产web中间件 这是由于公司老项目转化springboot存在太多坑&#xff0c;特别是hibernate事务一条就坑到跑路&#xff0c;你又不想搞没听说过的国产中间件兼容&#xff0c;又不想搞weblogic、WebSphere等中间件的适配&#xff…

系统存储架构升级分享 | 京东云技术团队

一、业务背景 系统业务功能&#xff1a;系统内部进行数据处理及整合, 对外部系统提供结果数据的初始化(写)及查询数据结果服务。 系统网络架构: 部署架构对切量上线的影响 - 内部管理系统上线对其他系统的读业务无影响分布式缓存可进行单独扩容, 与存储及查询功能升级无关通过…

任务调度中心

可以服务器配置和权限&#xff0c;分配任务执行。当服务器下线后&#xff0c;任务会被在线服务器接管&#xff0c;当重新上线后会在次执行任务。接管任务的服务器会释放任务。调度过程的实现&#xff0c;可以二次开发。基于 netty tcp 通信开发。 下载地址&#xff1a; http:/…