原题链接:https://codeforces.com/problemset/problem/670/C

题目大意:

有 n 个人,每人会且仅会一种语言. (n ≤ 2e5)

语言有各自的编号(≤ 1e9)

这些人去看电影,一共有 m 种电影. (m ≤ 2e5)

每个电影的声音与字幕语言都不一样.

若有人的语言与声音语言一样,则称这个人很高兴♂.

若有人的语言与字幕语言一样,则称这个人比较高兴.

现让你选择一场电影,使得此电影中,很高兴的人最多,在此条件下,再使比较高兴的人最多.

分析:

因为要统计每种语言的人数,而语言编号 ≤ 1e9,存不下.

所以考虑离散化.

可得离散化之后,语言总数最多 n + 2m 种.

AC代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 2e5 + 5;
int n, m;
int a[maxn], b[maxn], c[maxn];
int sum[maxn * 3];
int cnt, mm;
int arr[maxn * 3], num[maxn * 3];
void discrete() {//离散化
sort(arr + 1, arr + cnt + 1);
for (int i = 1; i <= cnt; i++) {
if (i == 1 || arr[i] != arr[i - 1])
num[++mm] = arr[i];
}
}
int query(int x) {//二分查找x的位置
return lower_bound(num + 1, num + mm + 1, x) - num;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {//将所有电影和人涉及的语言放进一个数组,排序并离散化
scanf("%d", &a[i]);
arr[++cnt] = a[i];
}
scanf("%d", &m);
for (int i = 1; i <= m; i++) {
scanf("%d", &b[i]);
arr[++cnt] = b[i];
}
for (int i = 1; i <= m; i++) {
scanf("%d", &c[i]);
arr[++cnt] = c[i];
}
discrete();//离散化
for (int i = 1; i <= n; i++) {
int id = query(a[i]);//统计每种语言的人的数量
++sum[id];
}
int bmax = -1, cmax = -1, ans = 0;
for (int i = 1; i <= m; i++) {//选择满足题目要求的电影
int x = query(b[i]);
int y = query(c[i]);
if (sum[x] > bmax) {//优先考虑让很高兴的人最多
bmax = sum[x], cmax = sum[y];
ans = i;
}
else {
if (sum[x] == bmax && sum[y] > cmax) {//如果答案不唯一、则在此前提下再让比较高兴的人最多
bmax = sum[x], cmax = sum[y];
ans = i;
}
}
}
printf("%d\n", ans);
return 0;
}

暴力解法:670ms

#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int>PII;
int n, m;
int a[20000005];
map<int, int>mp;
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n;
for (int i = 1, a; i <= n; ++i)
cin >> a, mp[a]++;
int k, max1 = -1, max2 = -1;
cin >> m;
for (int i = 1; i <= m; ++i) {
cin >> a[i];
max1 = max(max1, mp[a[i]]);
}
for (int i = 1,b; i <= m; ++i) {
cin >> b;
if (mp[a[i]] == max1 && mp[b] > max2)
max2 = mp[b], k = i;
}
cout << k << endl;
}

Codeforces 670C (离散化入门题)的更多相关文章

  1. POJ1151-扫面线+线段树+离散化//入门题

    比较水的入门题 记录矩形竖边的x坐标,离散化排序.以被标记的边建树. 扫描线段树,查询线段树内被标记的边.遇到矩形的右边就删除此边 每一段的面积是查询结果乘边的横坐标之差,求和就是答案 #includ ...

  2. hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  3. poj 2524:Ubiquitous Religions(并查集,入门题)

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23997   Accepted:  ...

  4. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

  5. hdu 1754:I Hate It(线段树,入门题,RMQ问题)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. poj 3254 状压dp入门题

    1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...

  7. zstu.4194: 字符串匹配(kmp入门题&& 心得)

    4194: 字符串匹配 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 206  Solved: 78 Description 给你两个字符串A,B,请 ...

  8. hrbustoj 1073:病毒(并查集,入门题)

    病毒Time Limit: 1000 MS Memory Limit: 65536 KTotal Submit: 719(185 users) Total Accepted: 247(163 user ...

  9. hdu 1465:不容易系列之一(递推入门题)

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  10. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

随机推荐

  1. 【免费】小傅哥 DDD 开发小册

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 如果在面试的时候,面试官问你DDD是什么,你怎么解释?是不是感 ...

  2. 一文秒懂|Linux字符设备驱动

    1.前言 众所周知,Linux内核主要包括三种驱动模型,字符设备驱动,块设备驱动以及网络设备驱动. 其中,Linux字符设备驱动,可以说是Linux驱动开发中最常见的一种驱动模型. 我们该系列文章,主 ...

  3. [python] 基于Tablib库处理表格数据

    Tablib是一个用于处理电子表格(如 Excel,CSV,JSON)的Python 库.它提供了一种简单而强大的方式来操作和处理数据.利用Tablib,我们可以轻松地读取.写入.过滤和转换各种类型的 ...

  4. three.js 汽车行驶效果

    实现原理是使用TWEEN.Tween实现动画效果 实现 汽车模型加载 使用Promise编写模型的异步加载方法 Car.prototype.loadCar = function (position, ...

  5. 如何将 performance_schema 中的 TIMER 字段转换为日期时间

    问题 最近有好几个朋友问,如何将 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)转换为日期 ...

  6. [Clickhouse] Clickhouse 报SQLException : Read timed out

    1 问题描述 在使用Clickhouse(21.3.4.25)进行大数据量地数据查询,高频报出 SQLException : Read timed out 错误 2 问题分析 2.1 单次查询:耗时约 ...

  7. MyBatis-Plus雪花算法实现源码解析

    1. 雪花算法(Snowflake Algorithm) 雪花算法(Snowflake Algorithm)是一种用于生成唯一标识符(ID)的分布式算法.最初由 Twitter 公司开发,用于生成其内 ...

  8. Tensorflow2.0实现VGG13

    导入必要的库: import os import tensorflow as tf from tensorflow import keras from tensorflow.keras import ...

  9. SpringBoot整合简单的定时任务~

    定时任务框架很多种Quartz,SpringTask,xxljob,PowerJob... 1.JDK提供的timer // JDK提供的 Timer timer = new Timer(); //t ...

  10. MybatisPlus最新代码生成器(version3.5.1+),自定义文件模板

    1.导入依赖(我这里用的是gradle构建工具,maven也一样啦~) plugins { id 'java' id 'org.springframework.boot' version '2.7.3 ...