103.电影
原题链接:103. 电影
解题思路
虽然语言的范围在int以内,但是这m部电影与n个人最多涉及 2(m+n) 种语言。我们把所有电影和人涉及的语言放进一个数组,排序并离散化,用一个 1~2(m+n) 之间的整数代替每种语言。此时我们就可以利用数组直接统计会上述每种语言的人的数量,从而选择满足题目要求的电影。时间复杂度为 O((n+m)log(n+m))
样例代码
#include<bits/stdc++.h>
using namespace std;
#define N 200010
map<int ,int> s;
int a[N];
int b[N];
struct zz
{
int a;
int b;
}p[N];
int main()
{
int n,m,i,j,k;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
s[a[i]]++;
}
scanf("%d",&m);
for(i=1;i<=m;i++)
scanf("%d",&p[i].a);
for(i=1;i<=m;i++)
scanf("%d",&p[i].b);
int mm=0;
k=1;
for(i=1;i<=m;i++)
{
if(mm<s[p[i].a])
{
mm=s[p[i].a];
k=i;
}
}
int kk=0;
for(i=1;i<=m;i++)
{
if(s[p[i].a]==mm)
{
if(kk<s[p[i].b])
{
kk=s[p[i].b];
k=i;
}
}
}
printf("%d\n",k);
return 0;
}