题目描述
n 个科学家, 每个人都只会一门语言
m 个电影 , 每个电影 都有语音和字母,且语音和字母属于不同种类的语言
如果科学家能听懂电影语音,分数 为 2
如果科学家能看懂字母 分数 为 1
问 n 个科学家 选择 m个电影中的那一个电影 使得分数最高
算法
用一个map 统计 每种语言 所 拥有的科学家人数
用一个 vector 存储每个电影的相关信息 (id, 语音, 字母)
然后遍历 vecor, 找出其中分数最大的一个输出
C++ 代码
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int n,m;
unordered_map<int, int> lang;
bool cmp (vector<int> a, vector<int> b) {
if (lang[a[1]] == lang[b[1]]) {
if (lang[a[2]] == lang[b[2]]) return lang[a[0]] < lang[b[0]];
return lang[a[2]] > lang[b[2]];
}
return lang[a[1]] > lang[b[1]];
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) {
int t; scanf("%d", &t);
lang[t]++;
}
scanf("%d", &m);
// id voice zimu
vector<vector<int>> movie(m, vector<int>(3,0));
for (int i = 0; i < m; i ++ ) {
int t; scanf("%d", &t);
movie[i][0] = i + 1;
movie[i][1] = t;
}
for (int i = 0; i < m; i ++ ) {
int t; scanf("%d", &t);
movie[i][2] = t;
}
vector<int> res = movie[0];
for (int i = 1; i < m; i ++ ) {
if (cmp(movie[i], res)) res = movie[i];
}
printf("%d\n", res[0]);
return 0;
}