编辑
2024-09-19
算法题
00
请注意,本文编写于 280 天前,最后修改于 281 天前,其中某些信息可能已经过时。

今天做离散基础题

https://www.acwing.com/problem/content/105/

离散指的应该就是hash了

cpp
#include <iostream> #include <algorithm> using namespace std; const int MAX_N = 200001; // 科学家的最大数量 const int MAX_M = 200001; // 电影的最大数量 int n, m; int lang[MAX_N]; // 科学家懂得的语言 int voice[MAX_M], sub[MAX_M]; // 电影的语音和字幕语言 int unique_langs[MAX_N + 2 * MAX_M]; // 所有出现的语言编号 int lang_count[MAX_N + 2 * MAX_M]; // 统计每种语言有多少科学家懂得 int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> lang[i]; unique_langs[i] = lang[i]; } cin >> m; for (int i = 0; i < m; i++) { cin >> voice[i]; unique_langs[n + i] = voice[i]; } for (int i = 0; i < m; i++) { cin >> sub[i]; unique_langs[n + m + i] = sub[i]; } // 离散化语言编号 sort(unique_langs, unique_langs + n + 2 * m); int unique_count = unique(unique_langs, unique_langs + n + 2 * m) - unique_langs; // 统计每种语言有多少科学家懂得 for (int i = 0; i < n; i++) { int idx = lower_bound(unique_langs, unique_langs + unique_count, lang[i]) - unique_langs; lang_count[idx]++; } // 计算每部电影能让多少科学家开心和比较开心 int max_happy = -1; int max_happy_idx = -1; int max_comp_happy = -1; for (int i = 0; i < m; i++) { int voice_idx = lower_bound(unique_langs, unique_langs + unique_count, voice[i]) - unique_langs; int sub_idx = lower_bound(unique_langs, unique_langs + unique_count, sub[i]) - unique_langs; int happy = lang_count[voice_idx]; int comp_happy = lang_count[sub_idx]; if (happy > max_happy || (happy == max_happy && comp_happy > max_comp_happy)) { max_happy = happy; max_happy_idx = i; max_comp_happy = comp_happy; } } // 输出最终选择的电影编号 cout << max_happy_idx + 1 << endl; return 0; }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!