当前位置: 首页 > news >正文

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;
}

相关文章:

  • 设计模式——装饰器模式
  • 基于java的 aws s3文件上传
  • DNS域名解析以及操作流程
  • 力扣 | 509. Fibonacci
  • Springboot开发的大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统寝室系统技术文档论文功能部分
  • MySQL连续案例续集
  • Arduino开发实例-AS608光学指纹传感器驱动
  • ElasticSearch概述+SpringBoot 集成 ES
  • flutter使用get库管理路由,并设页面跳转动画和常见动画
  • 了解JavaScript 加密、混淆和生成签名
  • 逼格满满,推荐一个高效测试用例工具:XMind2TestCase !
  • 详解FreeRTOS:内存管理(高级篇—8)
  • 设计模式—— 单例设计模式
  • leetcode 动态规划(单词拆分)
  • 面向对象的三大特性
  • ➹使用webpack配置多页面应用(MPA)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular 响应式表单 基础例子
  • Centos6.8 使用rpm安装mysql5.7
  • co模块的前端实现
  • golang中接口赋值与方法集
  • Java 多线程编程之:notify 和 wait 用法
  • java8-模拟hadoop
  • jdbc就是这么简单
  • miaov-React 最佳入门
  • PAT A1120
  • vue:响应原理
  • 记一次用 NodeJs 实现模拟登录的思路
  • 今年的LC3大会没了?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 时间复杂度与空间复杂度分析
  • 使用 @font-face
  • UI设计初学者应该如何入门?
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #162 (Div. 2)
  • $.ajax中的eval及dataType
  • (145)光线追踪距离场柔和阴影
  • (附源码)php新闻发布平台 毕业设计 141646
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .Net 8.0 新的变化
  • .net core控制台应用程序初识
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @AutoConfigurationPackage的使用
  • @JsonSerialize注解的使用
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [BUG] Authentication Error
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [C++]STL之map